Changeset 1995612
- Timestamp:
- 12/15/2018 08:58:40 PM (7 years ago)
- Location:
- easy-panorama/trunk
- Files:
-
- 9 edited
-
.travis.yml (modified) (2 diffs)
-
README.md (modified) (4 diffs)
-
block/dist/block.js (modified) (1 diff)
-
block/dist/editor.css (modified) (1 diff)
-
block/src/block.js (modified) (5 diffs)
-
block/src/editor.scss (modified) (1 diff)
-
easy-panorama.php (modified) (1 diff)
-
includes/class-easy-panorama.php (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
easy-panorama/trunk/.travis.yml
r1496004 r1995612 1 language: php 1 2 sudo: false 2 language: php 3 dist: trusty 3 4 php: 5 - 5.6 6 - 7.0 7 - 7.1 4 8 - nightly 5 - 5.66 - 5.57 - 5.48 - 7.09 - hhvm10 11 # Declare which versions of WordPress to test against.12 # Also declare whether or not to test in Multisite.13 env:14 # Trunk15 # @link https://github.com/WordPress/WordPress16 - WP_VERSION=master WP_MULTISITE=017 - WP_VERSION=master WP_MULTISITE=118 # WordPress 4.519 # @link https://github.com/WordPress/WordPress/tree/4.5-branch20 - WP_VERSION=4.5 WP_MULTISITE=021 - WP_VERSION=4.5 WP_MULTISITE=122 9 23 10 matrix: … … 25 12 - php: nightly 26 13 14 before_install: 15 - composer self-update 16 27 17 install: 28 18 - composer self-update && composer --version 29 19 - export PATH="$HOME/.composer/vendor/bin:$PATH" 30 - composer global require squizlabs/php_codesniffer 20 - composer global require "squizlabs/php_codesniffer=*" 21 22 before_script: 23 - phpcs --version 31 24 32 25 script: -
easy-panorama/trunk/README.md
r1864376 r1995612 8 8 Easy Panorama plugin for WordPress websites allows you to display wide/panoramic images in a more accessible way: enjoy your panoramic photos scrolling them on the x-axis or moving your mobile device. 9 9 10 You can start embedding your panoramic images using the handy **shortcode** (TinyMCE editor) or the new ** GutenbergBlock**.10 You can start embedding your panoramic images using the handy **shortcode** (TinyMCE editor) or the new **Block**. 11 11 12 12 Easy Panorama uses the packed [Paver](http://terrymun.github.io/paver/?source=easy-panorama-wp-plugin) :smile:. … … 18 18 3. Other geek settings in the Advanced Settings page. 19 19 4. [easy_panorama] shortcode to embed panoramic images with no hassle. 20 5. Custom Gutenberg block for a better editing experience 🎉.20 5. Custom Panorama Block for a better editing experience 🎉. 21 21 22 22 ## Shortcode (Classic WordPress editor) … … 47 47 Include your favourite panoramic images in posts and pages using the **built-in block functionality**. 48 48 49 If you are using the Gutenberg editor , you find the **Panorama** block ready to be embedded in your post.49 If you are using the Gutenberg editor (WordPress >= 5.0), you find the **Panorama** block ready to be embedded in your post. 50 50 Search for "Panorama" within the blocks list, select it and choose the image you want to include. 51 You can customize the appearance and behaviour of each panoramic viewer thanks to the GutenbergInspector Control.51 You can customize the appearance and behaviour of each panoramic viewer thanks to the Inspector Control. 52 52 53 ### GutenbergBlock features54 * Embed your panoramic/wide images in the new Gutenbergeditor with no hassle.55 * Preview your panorama within the Gutenbergeditor.56 * Customize the appearance and behaviour of each panoramic viewer thanks to the GutenbergInspector Control.53 ### Block features 54 * Embed your panoramic/wide images in the new editor with no hassle. 55 * Preview your panorama within the editor. 56 * Customize the appearance and behaviour of each panoramic viewer thanks to the Inspector Control. 57 57 * Transform "Image" blocks into "Panorama" blocks with one click. 58 58 * Transform "Panorama" blocks into "Image" blocks with one click. … … 63 63 # Requirements 64 64 Easy Panorama requires: 65 * [WordPress](https://wordpress.org/) >= 4.9 65 * [WordPress](https://wordpress.org/) >= 4.5 (Required for TinyMCE shortcode) 66 * [WordPress](https://wordpress.org/) >= 5.0 (Required for the new custom Panorama Block feature) 66 67 * [PHP](https://secure.php.net/manual/en/install.php) >= 5.6 67 * [Gutenberg](https://wordpress.org/plugins/gutenberg/) >= 2.7 (Required for the new Gutenberg block feature) 68 * [Node](https://nodejs.org/en/) >= 8.9.X (Required for Gutenberg block development) 69 * [Yarn](https://yarnpkg.com/en/docs/install) (Required for Gutenberg block development) 68 * [Node](https://nodejs.org/en/) >= 8.9.X (Required for Block feature development) 69 * [Yarn](https://yarnpkg.com/en/docs/install) (Required for Block feature development) 70 70 71 71 # Contribution -
easy-panorama/trunk/block/dist/block.js
r1936503 r1995612 88 88 89 89 "use strict"; 90 eval("var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar __ = wp.i18n.__;\nvar Component = wp.element.Component;\nvar _wp$editor = wp.editor,\n MediaPlaceholder = _wp$editor.MediaPlaceholder,\n MediaUpload = _wp$editor.MediaUpload,\n BlockControls = _wp$editor.BlockControls,\n InspectorControls = _wp$editor.InspectorControls;\nvar _wp$components = wp.components,\n Toolbar = _wp$components.Toolbar,\n IconButton = _wp$components.IconButton,\n RangeControl = _wp$components.RangeControl,\n ToggleControl = _wp$components.ToggleControl,\n TextControl = _wp$components.TextControl,\n SelectControl = _wp$components.SelectControl,\n PanelBody = _wp$components.PanelBody,\n Dashicon = _wp$components.Dashicon,\n Tooltip = _wp$components.Tooltip,\n Placeholder = _wp$components.Placeholder;\nvar withSelect = wp.data.withSelect;\n\nvar PanoramaBlock = function (_Component) {\n _inherits(PanoramaBlock, _Component);\n\n function PanoramaBlock() {\n _classCallCheck(this, PanoramaBlock);\n\n var _this = _possibleConstructorReturn(this, (PanoramaBlock.__proto__ || Object.getPrototypeOf(PanoramaBlock)).apply(this, arguments));\n\n _this.setImageData = _this.setImageData.bind(_this);\n _this.onSelectImage = _this.onSelectImage.bind(_this);\n _this.onChangeMediaAlt = _this.onChangeMediaAlt.bind(_this);\n _this.onChangeMediaTitle = _this.onChangeMediaTitle.bind(_this);\n _this.onChangeContainerHeight = _this.onChangeContainerHeight.bind(_this);\n _this.onChangeStartPosition = _this.onChangeStartPosition.bind(_this);\n _this.onChangeGracefulFailure = _this.onChangeGracefulFailure.bind(_this);\n _this.onChangeFailureMessage = _this.onChangeFailureMessage.bind(_this);\n _this.onChangeFailureMessageInsert = _this.onChangeFailureMessageInsert.bind(_this);\n _this.onChangeMinimumOverflow = _this.onChangeMinimumOverflow.bind(_this);\n _this.onChangeDisplayMeta = _this.onChangeDisplayMeta.bind(_this);\n return _this;\n }\n\n _createClass(PanoramaBlock, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _props = this.props,\n url = _props.attributes.url,\n image = _props.image;\n\n if (!url && image && image.data !== undefined) {\n this.setImageData(image.data);\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n var _props2 = this.props,\n url = _props2.attributes.url,\n image = _props2.image;\n\n if (!url && image) {\n this.setImageData(image);\n }\n }\n\n /**\n * @description Set component data from received params\n * @param {object} Image data\n * @return {array} Errors\n */\n\n }, {\n key: \"setImageData\",\n value: function setImageData(data) {\n var _props3 = this.props,\n _props3$attributes = _props3.attributes,\n url = _props3$attributes.url,\n alt = _props3$attributes.alt,\n title = _props3$attributes.title,\n setAttributes = _props3.setAttributes;\n\n if (!url) {\n setAttributes({\n url: data.source_url\n });\n }\n if (!alt) {\n setAttributes({\n alt: data.alt_text\n });\n }\n if (!title) {\n setAttributes({\n title: data.title.rendered\n });\n }\n }\n\n /**\n * @description Handle component image selection\n * @param {object} Component media data\n */\n\n }, {\n key: \"onSelectImage\",\n value: function onSelectImage(media) {\n this.props.setAttributes({\n url: media.url,\n id: media.id,\n alt: media.alt,\n title: media.title\n });\n }\n }, {\n key: \"onChangeMediaAlt\",\n\n\n /**\n * @description Handle component image alt update\n * @param {string} Image alt\n */\n value: function onChangeMediaAlt(alt) {\n this.props.setAttributes({\n alt: alt\n });\n }\n }, {\n key: \"onChangeMediaTitle\",\n\n\n /**\n * @description Handle component image title update\n * @param {string} Image title\n */\n value: function onChangeMediaTitle(title) {\n this.props.setAttributes({\n title: title\n });\n }\n }, {\n key: \"onChangeContainerHeight\",\n\n\n /**\n * @description Handle component container height update\n * @param {string} Container height\n */\n value: function onChangeContainerHeight(height) {\n this.props.setAttributes({\n containerHeight: Number(height)\n });\n }\n }, {\n key: \"onChangeStartPosition\",\n\n\n /**\n * @description Handle component startPosition update\n * @param {string} startPosition\n */\n value: function onChangeStartPosition(position) {\n this.props.setAttributes({\n startPosition: position\n });\n }\n }, {\n key: \"onChangeGracefulFailure\",\n\n\n /**\n * @description Handle component gracefulFailure update\n * @param none\n */\n value: function onChangeGracefulFailure() {\n var _props4 = this.props,\n gracefulFailure = _props4.attributes.gracefulFailure,\n setAttributes = _props4.setAttributes;\n\n setAttributes({\n gracefulFailure: !gracefulFailure\n });\n }\n }, {\n key: \"onChangeFailureMessage\",\n\n\n /**\n * @description Handle component failureMessage update\n * @param {string} failureMessage\n */\n value: function onChangeFailureMessage(message) {\n this.props.setAttributes({\n failureMessage: message\n });\n }\n\n /**\n * @description Handle component failureMessageInsert update\n * @param {string} failureMessageInsert\n */\n\n }, {\n key: \"onChangeFailureMessageInsert\",\n value: function onChangeFailureMessageInsert(position) {\n this.props.setAttributes({\n failureMessageInsert: position\n });\n }\n\n /**\n * @description Handle component minimumOverflow update\n * @param {string} minimumOverflow\n */\n\n }, {\n key: \"onChangeMinimumOverflow\",\n value: function onChangeMinimumOverflow(value) {\n this.props.setAttributes({\n minimumOverflow: value\n });\n }\n\n /**\n * @description Handle component displayMeta update\n * @param none\n */\n\n }, {\n key: \"onChangeDisplayMeta\",\n value: function onChangeDisplayMeta() {\n var _props5 = this.props,\n displayMeta = _props5.attributes.displayMeta,\n setAttributes = _props5.setAttributes;\n\n setAttributes({\n displayMeta: !displayMeta\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _props6 = this.props,\n isSelected = _props6.isSelected,\n className = _props6.className,\n image = _props6.image,\n _props6$attributes = _props6.attributes,\n url = _props6$attributes.url,\n id = _props6$attributes.id,\n alt = _props6$attributes.alt,\n title = _props6$attributes.title,\n containerHeight = _props6$attributes.containerHeight,\n startPosition = _props6$attributes.startPosition,\n gracefulFailure = _props6$attributes.gracefulFailure,\n failureMessage = _props6$attributes.failureMessage,\n failureMessageInsert = _props6$attributes.failureMessageInsert,\n minimumOverflow = _props6$attributes.minimumOverflow,\n displayMeta = _props6$attributes.displayMeta;\n\n\n var panoramaStyle = {\n height: containerHeight + 'px'\n };\n\n if (!url && image) {\n return [wp.element.createElement(\n Placeholder,\n {\n key: \"easypanorama-loading\",\n icon: \"cover-image\",\n label: __('Panorama'),\n className: \"easypanorama-loading\"\n },\n wp.element.createElement(\n \"span\",\n null,\n __('Loading...')\n )\n )];\n }\n\n if (!url && !image) {\n return [wp.element.createElement(MediaPlaceholder, {\n key: \"easypanorama-placeholder\",\n icon: \"cover-image\",\n labels: {\n title: __('Panorama'),\n name: __('images')\n },\n className: className,\n onSelect: this.onSelectImage,\n accept: \"image/*\",\n type: \"image\"\n })];\n };\n\n var controls = isSelected && wp.element.createElement(\n BlockControls,\n { key: \"easypanorama-controls\" },\n wp.element.createElement(\n Toolbar,\n { key: \"easypanorama-toolbar\" },\n wp.element.createElement(MediaUpload, {\n key: \"easypanorama-mediaupload\",\n onSelect: this.onSelectImage,\n type: \"image\",\n value: this.id,\n render: function render(_ref) {\n var open = _ref.open;\n return wp.element.createElement(IconButton, {\n key: \"easypanorama-openmedia\",\n className: \"components-toolbar__control\",\n label: __('Edit image'),\n icon: \"edit\",\n onClick: open\n });\n }\n })\n )\n );\n\n return [controls, isSelected && wp.element.createElement(\n InspectorControls,\n { key: \"easypanorama-inspector\" },\n wp.element.createElement(\n PanelBody,\n { title: __('Panorama settings'), key: \"easypanorama-inspector-settings\" },\n wp.element.createElement(TextControl, {\n key: \"easypanorama-control-containerHeight\",\n label: __('Container height'),\n help: __('Insert the height for this panoramic image container.'),\n type: 'number',\n value: containerHeight,\n onChange: this.onChangeContainerHeight\n }),\n wp.element.createElement(RangeControl, {\n key: \"easypanorama-control-startPosition\",\n label: __('Start position'),\n help: __('Determines the start position of the panorama: insert a value from 0 (left) to 10 (right).'),\n value: startPosition,\n onChange: this.onChangeStartPosition,\n min: 0,\n max: 10\n }),\n wp.element.createElement(ToggleControl, {\n key: \"easypanorama-control-displayMeta\",\n label: __('Show meta on overlay'),\n checked: displayMeta,\n onChange: this.onChangeDisplayMeta\n }),\n displayMeta && wp.element.createElement(TextControl, {\n key: \"easypanorama-control-title\",\n label: __('Title'),\n value: title,\n onChange: this.onChangeMediaTitle\n }),\n displayMeta && wp.element.createElement(TextControl, {\n key: \"easypanorama-control-alt\",\n label: __('Description'),\n value: alt,\n onChange: this.onChangeMediaAlt\n })\n ),\n wp.element.createElement(\n PanelBody,\n { title: __('Advanced settings'), key: \"easypanorama-inspector-advanced\" },\n wp.element.createElement(TextControl, {\n key: \"easypanorama-control-minimumOverflow\",\n label: __('Minimum overflow'),\n help: __('The excess width in pixels the container must have before panorama kicks in.'),\n type: 'number',\n value: minimumOverflow,\n onChange: this.onChangeMinimumOverflow\n }),\n wp.element.createElement(ToggleControl, {\n key: \"easypanorama-control-gracefulFailure\",\n label: __('Insert failure message'),\n checked: gracefulFailure,\n onChange: this.onChangeGracefulFailure\n }),\n gracefulFailure && wp.element.createElement(SelectControl, {\n key: \"easypanorama-control-failureMessageInsert\",\n label: __('Position'),\n value: failureMessageInsert,\n options: [{ value: 'after', label: 'After the panorama container' }, { value: 'before', label: 'Before the panorama container' }],\n onChange: this.onChangeFailureMessageInsert\n }),\n gracefulFailure && wp.element.createElement(TextControl, {\n key: \"easypanorama-control-failureMessage\",\n label: __('Message'),\n help: __('This message will appear in mobile devices with no gyroscopic data or no physical orientation support.'),\n value: failureMessage,\n onChange: this.onChangeFailureMessage\n })\n )\n ), wp.element.createElement(\n \"div\",\n { className: className, key: \"easypanorama-block-editor\" },\n wp.element.createElement(\n \"div\",\n { style: panoramaStyle, className: \"panorama--image\", key: \"easypanorama-panorama-container\" },\n wp.element.createElement(\"img\", { src: url, alt: alt, title: title, className: \"wp-image-\" + id, key: \"easypanorama-panorama-image\" })\n ),\n wp.element.createElement(\n \"span\",\n { className: \"panorama--help-text\", key: \"easypanorama-block-help\" },\n wp.element.createElement(\n Tooltip,\n { text: __('This is a preview, some features are not available.'), key: \"easypanorama-block-help-tooltip\" },\n wp.element.createElement(\n \"span\",\n { className: \"panorama--help-icon\", key: \"easypanorama-block-help-icon-container\" },\n wp.element.createElement(Dashicon, { size: \"25\", icon: \"info\", key: \"easypanorama-block-help-icon\" })\n )\n )\n )\n )];\n }\n }]);\n\n return PanoramaBlock;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withSelect(function (select, ownProps) {\n var _select = select('core'),\n getMedia = _select.getMedia;\n\n var id = ownProps.attributes.id;\n\n return {\n image: id ? getMedia(id) : null\n };\n})(PanoramaBlock));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Jsb2NrLmpzPzM4OTciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX18gPSB3cC5pMThuLl9fO1xudmFyIENvbXBvbmVudCA9IHdwLmVsZW1lbnQuQ29tcG9uZW50O1xudmFyIF93cCRlZGl0b3IgPSB3cC5lZGl0b3IsXG4gICAgTWVkaWFQbGFjZWhvbGRlciA9IF93cCRlZGl0b3IuTWVkaWFQbGFjZWhvbGRlcixcbiAgICBNZWRpYVVwbG9hZCA9IF93cCRlZGl0b3IuTWVkaWFVcGxvYWQsXG4gICAgQmxvY2tDb250cm9scyA9IF93cCRlZGl0b3IuQmxvY2tDb250cm9scyxcbiAgICBJbnNwZWN0b3JDb250cm9scyA9IF93cCRlZGl0b3IuSW5zcGVjdG9yQ29udHJvbHM7XG52YXIgX3dwJGNvbXBvbmVudHMgPSB3cC5jb21wb25lbnRzLFxuICAgIFRvb2xiYXIgPSBfd3AkY29tcG9uZW50cy5Ub29sYmFyLFxuICAgIEljb25CdXR0b24gPSBfd3AkY29tcG9uZW50cy5JY29uQnV0dG9uLFxuICAgIFJhbmdlQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlJhbmdlQ29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbCxcbiAgICBUZXh0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlRleHRDb250cm9sLFxuICAgIFNlbGVjdENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5TZWxlY3RDb250cm9sLFxuICAgIFBhbmVsQm9keSA9IF93cCRjb21wb25lbnRzLlBhbmVsQm9keSxcbiAgICBEYXNoaWNvbiA9IF93cCRjb21wb25lbnRzLkRhc2hpY29uLFxuICAgIFRvb2x0aXAgPSBfd3AkY29tcG9uZW50cy5Ub29sdGlwLFxuICAgIFBsYWNlaG9sZGVyID0gX3dwJGNvbXBvbmVudHMuUGxhY2Vob2xkZXI7XG52YXIgd2l0aFNlbGVjdCA9IHdwLmRhdGEud2l0aFNlbGVjdDtcblxudmFyIFBhbm9yYW1hQmxvY2sgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUGFub3JhbWFCbG9jaywgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUGFub3JhbWFCbG9jaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGFub3JhbWFCbG9jayk7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUGFub3JhbWFCbG9jay5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFBhbm9yYW1hQmxvY2spKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblxuICAgIF90aGlzLnNldEltYWdlRGF0YSA9IF90aGlzLnNldEltYWdlRGF0YS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vblNlbGVjdEltYWdlID0gX3RoaXMub25TZWxlY3RJbWFnZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZU1lZGlhQWx0ID0gX3RoaXMub25DaGFuZ2VNZWRpYUFsdC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZU1lZGlhVGl0bGUgPSBfdGhpcy5vbkNoYW5nZU1lZGlhVGl0bGUuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25DaGFuZ2VDb250YWluZXJIZWlnaHQgPSBfdGhpcy5vbkNoYW5nZUNvbnRhaW5lckhlaWdodC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZVN0YXJ0UG9zaXRpb24gPSBfdGhpcy5vbkNoYW5nZVN0YXJ0UG9zaXRpb24uYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25DaGFuZ2VHcmFjZWZ1bEZhaWx1cmUgPSBfdGhpcy5vbkNoYW5nZUdyYWNlZnVsRmFpbHVyZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZUZhaWx1cmVNZXNzYWdlID0gX3RoaXMub25DaGFuZ2VGYWlsdXJlTWVzc2FnZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZUZhaWx1cmVNZXNzYWdlSW5zZXJ0ID0gX3RoaXMub25DaGFuZ2VGYWlsdXJlTWVzc2FnZUluc2VydC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZU1pbmltdW1PdmVyZmxvdyA9IF90aGlzLm9uQ2hhbmdlTWluaW11bU92ZXJmbG93LmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlRGlzcGxheU1ldGEgPSBfdGhpcy5vbkNoYW5nZURpc3BsYXlNZXRhLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQYW5vcmFtYUJsb2NrLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHVybCA9IF9wcm9wcy5hdHRyaWJ1dGVzLnVybCxcbiAgICAgICAgICBpbWFnZSA9IF9wcm9wcy5pbWFnZTtcblxuICAgICAgaWYgKCF1cmwgJiYgaW1hZ2UgJiYgaW1hZ2UuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0SW1hZ2VEYXRhKGltYWdlLmRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHVybCA9IF9wcm9wczIuYXR0cmlidXRlcy51cmwsXG4gICAgICAgICAgaW1hZ2UgPSBfcHJvcHMyLmltYWdlO1xuXG4gICAgICBpZiAoIXVybCAmJiBpbWFnZSkge1xuICAgICAgICB0aGlzLnNldEltYWdlRGF0YShpbWFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldCBjb21wb25lbnQgZGF0YSBmcm9tIHJlY2VpdmVkIHBhcmFtc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBJbWFnZSBkYXRhXG4gICAgICogQHJldHVybiB7YXJyYXl9IEVycm9yc1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwic2V0SW1hZ2VEYXRhXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldEltYWdlRGF0YShkYXRhKSB7XG4gICAgICB2YXIgX3Byb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgX3Byb3BzMyRhdHRyaWJ1dGVzID0gX3Byb3BzMy5hdHRyaWJ1dGVzLFxuICAgICAgICAgIHVybCA9IF9wcm9wczMkYXR0cmlidXRlcy51cmwsXG4gICAgICAgICAgYWx0ID0gX3Byb3BzMyRhdHRyaWJ1dGVzLmFsdCxcbiAgICAgICAgICB0aXRsZSA9IF9wcm9wczMkYXR0cmlidXRlcy50aXRsZSxcbiAgICAgICAgICBzZXRBdHRyaWJ1dGVzID0gX3Byb3BzMy5zZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICBzZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICB1cmw6IGRhdGEuc291cmNlX3VybFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghYWx0KSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgIGFsdDogZGF0YS5hbHRfdGV4dFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUucmVuZGVyZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEhhbmRsZSBjb21wb25lbnQgaW1hZ2Ugc2VsZWN0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IENvbXBvbmVudCBtZWRpYSBkYXRhXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJvblNlbGVjdEltYWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uU2VsZWN0SW1hZ2UobWVkaWEpIHtcbiAgICAgIHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIHVybDogbWVkaWEudXJsLFxuICAgICAgICBpZDogbWVkaWEuaWQsXG4gICAgICAgIGFsdDogbWVkaWEuYWx0LFxuICAgICAgICB0aXRsZTogbWVkaWEudGl0bGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZU1lZGlhQWx0XCIsXG5cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBIYW5kbGUgY29tcG9uZW50IGltYWdlIGFsdCB1cGRhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gSW1hZ2UgYWx0XG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlTWVkaWFBbHQoYWx0KSB7XG4gICAgICB0aGlzLnByb3BzLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBhbHQ6IGFsdFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlTWVkaWFUaXRsZVwiLFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBpbWFnZSB0aXRsZSB1cGRhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gSW1hZ2UgdGl0bGVcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VNZWRpYVRpdGxlKHRpdGxlKSB7XG4gICAgICB0aGlzLnByb3BzLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICB0aXRsZTogdGl0bGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZUNvbnRhaW5lckhlaWdodFwiLFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBjb250YWluZXIgaGVpZ2h0IHVwZGF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBDb250YWluZXIgaGVpZ2h0XG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlQ29udGFpbmVySGVpZ2h0KGhlaWdodCkge1xuICAgICAgdGhpcy5wcm9wcy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBOdW1iZXIoaGVpZ2h0KVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlU3RhcnRQb3NpdGlvblwiLFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBzdGFydFBvc2l0aW9uIHVwZGF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGFydFBvc2l0aW9uXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlU3RhcnRQb3NpdGlvbihwb3NpdGlvbikge1xuICAgICAgdGhpcy5wcm9wcy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgc3RhcnRQb3NpdGlvbjogcG9zaXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZUdyYWNlZnVsRmFpbHVyZVwiLFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBncmFjZWZ1bEZhaWx1cmUgdXBkYXRlXG4gICAgICogQHBhcmFtIG5vbmVcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VHcmFjZWZ1bEZhaWx1cmUoKSB7XG4gICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZ3JhY2VmdWxGYWlsdXJlID0gX3Byb3BzNC5hdHRyaWJ1dGVzLmdyYWNlZnVsRmFpbHVyZSxcbiAgICAgICAgICBzZXRBdHRyaWJ1dGVzID0gX3Byb3BzNC5zZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBzZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgZ3JhY2VmdWxGYWlsdXJlOiAhZ3JhY2VmdWxGYWlsdXJlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25DaGFuZ2VGYWlsdXJlTWVzc2FnZVwiLFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBmYWlsdXJlTWVzc2FnZSB1cGRhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZU1lc3NhZ2VcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VGYWlsdXJlTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICB0aGlzLnByb3BzLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBmYWlsdXJlTWVzc2FnZTogbWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEhhbmRsZSBjb21wb25lbnQgZmFpbHVyZU1lc3NhZ2VJbnNlcnQgdXBkYXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmVNZXNzYWdlSW5zZXJ0XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZUZhaWx1cmVNZXNzYWdlSW5zZXJ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlRmFpbHVyZU1lc3NhZ2VJbnNlcnQocG9zaXRpb24pIHtcbiAgICAgIHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIGZhaWx1cmVNZXNzYWdlSW5zZXJ0OiBwb3NpdGlvblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEhhbmRsZSBjb21wb25lbnQgbWluaW11bU92ZXJmbG93IHVwZGF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtaW5pbXVtT3ZlcmZsb3dcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlTWluaW11bU92ZXJmbG93XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlTWluaW11bU92ZXJmbG93KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBtaW5pbXVtT3ZlcmZsb3c6IHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBkaXNwbGF5TWV0YSB1cGRhdGVcbiAgICAgKiBAcGFyYW0gbm9uZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwib25DaGFuZ2VEaXNwbGF5TWV0YVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZURpc3BsYXlNZXRhKCkge1xuICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpc3BsYXlNZXRhID0gX3Byb3BzNS5hdHRyaWJ1dGVzLmRpc3BsYXlNZXRhLFxuICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHM1LnNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIHNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBkaXNwbGF5TWV0YTogIWRpc3BsYXlNZXRhXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc1NlbGVjdGVkID0gX3Byb3BzNi5pc1NlbGVjdGVkLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF9wcm9wczYuY2xhc3NOYW1lLFxuICAgICAgICAgIGltYWdlID0gX3Byb3BzNi5pbWFnZSxcbiAgICAgICAgICBfcHJvcHM2JGF0dHJpYnV0ZXMgPSBfcHJvcHM2LmF0dHJpYnV0ZXMsXG4gICAgICAgICAgdXJsID0gX3Byb3BzNiRhdHRyaWJ1dGVzLnVybCxcbiAgICAgICAgICBpZCA9IF9wcm9wczYkYXR0cmlidXRlcy5pZCxcbiAgICAgICAgICBhbHQgPSBfcHJvcHM2JGF0dHJpYnV0ZXMuYWx0LFxuICAgICAgICAgIHRpdGxlID0gX3Byb3BzNiRhdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodCA9IF9wcm9wczYkYXR0cmlidXRlcy5jb250YWluZXJIZWlnaHQsXG4gICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IF9wcm9wczYkYXR0cmlidXRlcy5zdGFydFBvc2l0aW9uLFxuICAgICAgICAgIGdyYWNlZnVsRmFpbHVyZSA9IF9wcm9wczYkYXR0cmlidXRlcy5ncmFjZWZ1bEZhaWx1cmUsXG4gICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBfcHJvcHM2JGF0dHJpYnV0ZXMuZmFpbHVyZU1lc3NhZ2UsXG4gICAgICAgICAgZmFpbHVyZU1lc3NhZ2VJbnNlcnQgPSBfcHJvcHM2JGF0dHJpYnV0ZXMuZmFpbHVyZU1lc3NhZ2VJbnNlcnQsXG4gICAgICAgICAgbWluaW11bU92ZXJmbG93ID0gX3Byb3BzNiRhdHRyaWJ1dGVzLm1pbmltdW1PdmVyZmxvdyxcbiAgICAgICAgICBkaXNwbGF5TWV0YSA9IF9wcm9wczYkYXR0cmlidXRlcy5kaXNwbGF5TWV0YTtcblxuXG4gICAgICB2YXIgcGFub3JhbWFTdHlsZSA9IHtcbiAgICAgICAgaGVpZ2h0OiBjb250YWluZXJIZWlnaHQgKyAncHgnXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXVybCAmJiBpbWFnZSkge1xuICAgICAgICByZXR1cm4gW3dwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBQbGFjZWhvbGRlcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZWFzeXBhbm9yYW1hLWxvYWRpbmdcIixcbiAgICAgICAgICAgIGljb246IFwiY292ZXItaW1hZ2VcIixcbiAgICAgICAgICAgIGxhYmVsOiBfXygnUGFub3JhbWEnKSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJlYXN5cGFub3JhbWEtbG9hZGluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBfXygnTG9hZGluZy4uLicpXG4gICAgICAgICAgKVxuICAgICAgICApXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1cmwgJiYgIWltYWdlKSB7XG4gICAgICAgIHJldHVybiBbd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KE1lZGlhUGxhY2Vob2xkZXIsIHtcbiAgICAgICAgICBrZXk6IFwiZWFzeXBhbm9yYW1hLXBsYWNlaG9sZGVyXCIsXG4gICAgICAgICAgaWNvbjogXCJjb3Zlci1pbWFnZVwiLFxuICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgdGl0bGU6IF9fKCdQYW5vcmFtYScpLFxuICAgICAgICAgICAgbmFtZTogX18oJ2ltYWdlcycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNlbGVjdDogdGhpcy5vblNlbGVjdEltYWdlLFxuICAgICAgICAgIGFjY2VwdDogXCJpbWFnZS8qXCIsXG4gICAgICAgICAgdHlwZTogXCJpbWFnZVwiXG4gICAgICAgIH0pXTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb250cm9scyA9IGlzU2VsZWN0ZWQgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBCbG9ja0NvbnRyb2xzLFxuICAgICAgICB7IGtleTogXCJlYXN5cGFub3JhbWEtY29udHJvbHNcIiB9LFxuICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgVG9vbGJhcixcbiAgICAgICAgICB7IGtleTogXCJlYXN5cGFub3JhbWEtdG9vbGJhclwiIH0sXG4gICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KE1lZGlhVXBsb2FkLCB7XG4gICAgICAgICAgICBrZXk6IFwiZWFzeXBhbm9yYW1hLW1lZGlhdXBsb2FkXCIsXG4gICAgICAgICAgICBvblNlbGVjdDogdGhpcy5vblNlbGVjdEltYWdlLFxuICAgICAgICAgICAgdHlwZTogXCJpbWFnZVwiLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihfcmVmKSB7XG4gICAgICAgICAgICAgIHZhciBvcGVuID0gX3JlZi5vcGVuO1xuICAgICAgICAgICAgICByZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KEljb25CdXR0b24sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiZWFzeXBhbm9yYW1hLW9wZW5tZWRpYVwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJjb21wb25lbnRzLXRvb2xiYXJfX2NvbnRyb2xcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogX18oJ0VkaXQgaW1hZ2UnKSxcbiAgICAgICAgICAgICAgICBpY29uOiBcImVkaXRcIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiBvcGVuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBbY29udHJvbHMsIGlzU2VsZWN0ZWQgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBJbnNwZWN0b3JDb250cm9scyxcbiAgICAgICAgeyBrZXk6IFwiZWFzeXBhbm9yYW1hLWluc3BlY3RvclwiIH0sXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgeyB0aXRsZTogX18oJ1Bhbm9yYW1hIHNldHRpbmdzJyksIGtleTogXCJlYXN5cGFub3JhbWEtaW5zcGVjdG9yLXNldHRpbmdzXCIgfSxcbiAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogXCJlYXN5cGFub3JhbWEtY29udHJvbC1jb250YWluZXJIZWlnaHRcIixcbiAgICAgICAgICAgIGxhYmVsOiBfXygnQ29udGFpbmVyIGhlaWdodCcpLFxuICAgICAgICAgICAgaGVscDogX18oJ0luc2VydCB0aGUgaGVpZ2h0IGZvciB0aGlzIHBhbm9yYW1pYyBpbWFnZSBjb250YWluZXIuJyksXG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIHZhbHVlOiBjb250YWluZXJIZWlnaHQsXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZUNvbnRhaW5lckhlaWdodFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYW5nZUNvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogXCJlYXN5cGFub3JhbWEtY29udHJvbC1zdGFydFBvc2l0aW9uXCIsXG4gICAgICAgICAgICBsYWJlbDogX18oJ1N0YXJ0IHBvc2l0aW9uJyksXG4gICAgICAgICAgICBoZWxwOiBfXygnRGV0ZXJtaW5lcyB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHBhbm9yYW1hOiBpbnNlcnQgYSB2YWx1ZSBmcm9tIDAgKGxlZnQpIHRvIDEwIChyaWdodCkuJyksXG4gICAgICAgICAgICB2YWx1ZTogc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlU3RhcnRQb3NpdGlvbixcbiAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgIG1heDogMTBcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuICAgICAgICAgICAga2V5OiBcImVhc3lwYW5vcmFtYS1jb250cm9sLWRpc3BsYXlNZXRhXCIsXG4gICAgICAgICAgICBsYWJlbDogX18oJ1Nob3cgbWV0YSBvbiBvdmVybGF5JyksXG4gICAgICAgICAgICBjaGVja2VkOiBkaXNwbGF5TWV0YSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlRGlzcGxheU1ldGFcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXNwbGF5TWV0YSAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogXCJlYXN5cGFub3JhbWEtY29udHJvbC10aXRsZVwiLFxuICAgICAgICAgICAgbGFiZWw6IF9fKCdUaXRsZScpLFxuICAgICAgICAgICAgdmFsdWU6IHRpdGxlLFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VNZWRpYVRpdGxlXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGlzcGxheU1ldGEgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICBrZXk6IFwiZWFzeXBhbm9yYW1hLWNvbnRyb2wtYWx0XCIsXG4gICAgICAgICAgICBsYWJlbDogX18oJ0Rlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICB2YWx1ZTogYWx0LFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VNZWRpYUFsdFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgeyB0aXRsZTogX18oJ0FkdmFuY2VkIHNldHRpbmdzJyksIGtleTogXCJlYXN5cGFub3JhbWEtaW5zcGVjdG9yLWFkdmFuY2VkXCIgfSxcbiAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogXCJlYXN5cGFub3JhbWEtY29udHJvbC1taW5pbXVtT3ZlcmZsb3dcIixcbiAgICAgICAgICAgIGxhYmVsOiBfXygnTWluaW11bSBvdmVyZmxvdycpLFxuICAgICAgICAgICAgaGVscDogX18oJ1RoZSBleGNlc3Mgd2lkdGggaW4gcGl4ZWxzIHRoZSBjb250YWluZXIgbXVzdCBoYXZlIGJlZm9yZSBwYW5vcmFtYSBraWNrcyBpbi4nKSxcbiAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgdmFsdWU6IG1pbmltdW1PdmVyZmxvdyxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlTWluaW11bU92ZXJmbG93XG4gICAgICAgICAgfSksXG4gICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogXCJlYXN5cGFub3JhbWEtY29udHJvbC1ncmFjZWZ1bEZhaWx1cmVcIixcbiAgICAgICAgICAgIGxhYmVsOiBfXygnSW5zZXJ0IGZhaWx1cmUgbWVzc2FnZScpLFxuICAgICAgICAgICAgY2hlY2tlZDogZ3JhY2VmdWxGYWlsdXJlLFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VHcmFjZWZ1bEZhaWx1cmVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBncmFjZWZ1bEZhaWx1cmUgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogXCJlYXN5cGFub3JhbWEtY29udHJvbC1mYWlsdXJlTWVzc2FnZUluc2VydFwiLFxuICAgICAgICAgICAgbGFiZWw6IF9fKCdQb3NpdGlvbicpLFxuICAgICAgICAgICAgdmFsdWU6IGZhaWx1cmVNZXNzYWdlSW5zZXJ0LFxuICAgICAgICAgICAgb3B0aW9uczogW3sgdmFsdWU6ICdhZnRlcicsIGxhYmVsOiAnQWZ0ZXIgdGhlIHBhbm9yYW1hIGNvbnRhaW5lcicgfSwgeyB2YWx1ZTogJ2JlZm9yZScsIGxhYmVsOiAnQmVmb3JlIHRoZSBwYW5vcmFtYSBjb250YWluZXInIH1dLFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VGYWlsdXJlTWVzc2FnZUluc2VydFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdyYWNlZnVsRmFpbHVyZSAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogXCJlYXN5cGFub3JhbWEtY29udHJvbC1mYWlsdXJlTWVzc2FnZVwiLFxuICAgICAgICAgICAgbGFiZWw6IF9fKCdNZXNzYWdlJyksXG4gICAgICAgICAgICBoZWxwOiBfXygnVGhpcyBtZXNzYWdlIHdpbGwgYXBwZWFyIGluIG1vYmlsZSBkZXZpY2VzIHdpdGggbm8gZ3lyb3Njb3BpYyBkYXRhIG9yIG5vIHBoeXNpY2FsIG9yaWVudGF0aW9uIHN1cHBvcnQuJyksXG4gICAgICAgICAgICB2YWx1ZTogZmFpbHVyZU1lc3NhZ2UsXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZUZhaWx1cmVNZXNzYWdlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSwgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3NOYW1lLCBrZXk6IFwiZWFzeXBhbm9yYW1hLWJsb2NrLWVkaXRvclwiIH0sXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3R5bGU6IHBhbm9yYW1hU3R5bGUsIGNsYXNzTmFtZTogXCJwYW5vcmFtYS0taW1hZ2VcIiwga2V5OiBcImVhc3lwYW5vcmFtYS1wYW5vcmFtYS1jb250YWluZXJcIiB9LFxuICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogdXJsLCBhbHQ6IGFsdCwgdGl0bGU6IHRpdGxlLCBjbGFzc05hbWU6IFwid3AtaW1hZ2UtXCIgKyBpZCwga2V5OiBcImVhc3lwYW5vcmFtYS1wYW5vcmFtYS1pbWFnZVwiIH0pXG4gICAgICAgICksXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICB7IGNsYXNzTmFtZTogXCJwYW5vcmFtYS0taGVscC10ZXh0XCIsIGtleTogXCJlYXN5cGFub3JhbWEtYmxvY2staGVscFwiIH0sXG4gICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgVG9vbHRpcCxcbiAgICAgICAgICAgIHsgdGV4dDogX18oJ1RoaXMgaXMgYSBwcmV2aWV3LCBzb21lIGZlYXR1cmVzIGFyZSBub3QgYXZhaWxhYmxlLicpLCBrZXk6IFwiZWFzeXBhbm9yYW1hLWJsb2NrLWhlbHAtdG9vbHRpcFwiIH0sXG4gICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogXCJwYW5vcmFtYS0taGVscC1pY29uXCIsIGtleTogXCJlYXN5cGFub3JhbWEtYmxvY2staGVscC1pY29uLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChEYXNoaWNvbiwgeyBzaXplOiBcIjI1XCIsIGljb246IFwiaW5mb1wiLCBrZXk6IFwiZWFzeXBhbm9yYW1hLWJsb2NrLWhlbHAtaWNvblwiIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUGFub3JhbWFCbG9jaztcbn0oQ29tcG9uZW50KTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNlbGVjdChmdW5jdGlvbiAoc2VsZWN0LCBvd25Qcm9wcykge1xuICB2YXIgX3NlbGVjdCA9IHNlbGVjdCgnY29yZScpLFxuICAgICAgZ2V0TWVkaWEgPSBfc2VsZWN0LmdldE1lZGlhO1xuXG4gIHZhciBpZCA9IG93blByb3BzLmF0dHJpYnV0ZXMuaWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBpbWFnZTogaWQgPyBnZXRNZWRpYShpZCkgOiBudWxsXG4gIH07XG59KShQYW5vcmFtYUJsb2NrKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2Jsb2NrLmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3\n");90 eval("var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar __ = wp.i18n.__;\nvar Component = wp.element.Component;\nvar _wp$editor = wp.editor,\n MediaPlaceholder = _wp$editor.MediaPlaceholder,\n MediaUpload = _wp$editor.MediaUpload,\n MediaUploadCheck = _wp$editor.MediaUploadCheck,\n BlockControls = _wp$editor.BlockControls,\n InspectorControls = _wp$editor.InspectorControls;\nvar _wp$components = wp.components,\n Toolbar = _wp$components.Toolbar,\n IconButton = _wp$components.IconButton,\n RangeControl = _wp$components.RangeControl,\n ToggleControl = _wp$components.ToggleControl,\n TextControl = _wp$components.TextControl,\n SelectControl = _wp$components.SelectControl,\n PanelBody = _wp$components.PanelBody,\n Dashicon = _wp$components.Dashicon,\n Tooltip = _wp$components.Tooltip,\n Placeholder = _wp$components.Placeholder;\nvar withSelect = wp.data.withSelect;\n\n\nvar ALLOWED_MEDIA_TYPES = ['image'];\n\nvar PanoramaBlock = function (_Component) {\n _inherits(PanoramaBlock, _Component);\n\n function PanoramaBlock() {\n _classCallCheck(this, PanoramaBlock);\n\n var _this = _possibleConstructorReturn(this, (PanoramaBlock.__proto__ || Object.getPrototypeOf(PanoramaBlock)).apply(this, arguments));\n\n _this.setImageData = _this.setImageData.bind(_this);\n _this.onSelectImage = _this.onSelectImage.bind(_this);\n _this.onChangeMediaAlt = _this.onChangeMediaAlt.bind(_this);\n _this.onChangeMediaTitle = _this.onChangeMediaTitle.bind(_this);\n _this.onChangeContainerHeight = _this.onChangeContainerHeight.bind(_this);\n _this.onChangeStartPosition = _this.onChangeStartPosition.bind(_this);\n _this.onChangeGracefulFailure = _this.onChangeGracefulFailure.bind(_this);\n _this.onChangeFailureMessage = _this.onChangeFailureMessage.bind(_this);\n _this.onChangeFailureMessageInsert = _this.onChangeFailureMessageInsert.bind(_this);\n _this.onChangeMinimumOverflow = _this.onChangeMinimumOverflow.bind(_this);\n _this.onChangeDisplayMeta = _this.onChangeDisplayMeta.bind(_this);\n return _this;\n }\n\n _createClass(PanoramaBlock, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n url = _props.attributes.url,\n image = _props.image;\n\n if (!url && image && image.data !== undefined) {\n this.setImageData(image.data);\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n var _props2 = this.props,\n url = _props2.attributes.url,\n image = _props2.image;\n\n if (!url && image) {\n this.setImageData(image);\n }\n }\n\n /**\n * @description Set component data from received params\n * @param {object} Image data\n * @return {array} Errors\n */\n\n }, {\n key: 'setImageData',\n value: function setImageData(data) {\n var _props3 = this.props,\n _props3$attributes = _props3.attributes,\n url = _props3$attributes.url,\n alt = _props3$attributes.alt,\n title = _props3$attributes.title,\n setAttributes = _props3.setAttributes;\n\n if (!url) {\n setAttributes({\n url: data.source_url\n });\n }\n if (!alt) {\n setAttributes({\n alt: data.alt_text\n });\n }\n if (!title) {\n setAttributes({\n title: data.title.rendered\n });\n }\n }\n\n /**\n * @description Handle component image selection\n * @param {object} Component media data\n */\n\n }, {\n key: 'onSelectImage',\n value: function onSelectImage(media) {\n this.props.setAttributes({\n url: media.url,\n id: media.id,\n alt: media.alt,\n title: media.title\n });\n }\n }, {\n key: 'onChangeMediaAlt',\n\n\n /**\n * @description Handle component image alt update\n * @param {string} Image alt\n */\n value: function onChangeMediaAlt(alt) {\n this.props.setAttributes({\n alt: alt\n });\n }\n }, {\n key: 'onChangeMediaTitle',\n\n\n /**\n * @description Handle component image title update\n * @param {string} Image title\n */\n value: function onChangeMediaTitle(title) {\n this.props.setAttributes({\n title: title\n });\n }\n }, {\n key: 'onChangeContainerHeight',\n\n\n /**\n * @description Handle component container height update\n * @param {string} Container height\n */\n value: function onChangeContainerHeight(height) {\n this.props.setAttributes({\n containerHeight: Number(height)\n });\n }\n }, {\n key: 'onChangeStartPosition',\n\n\n /**\n * @description Handle component startPosition update\n * @param {string} startPosition\n */\n value: function onChangeStartPosition(position) {\n this.props.setAttributes({\n startPosition: position\n });\n }\n }, {\n key: 'onChangeGracefulFailure',\n\n\n /**\n * @description Handle component gracefulFailure update\n * @param none\n */\n value: function onChangeGracefulFailure() {\n var _props4 = this.props,\n gracefulFailure = _props4.attributes.gracefulFailure,\n setAttributes = _props4.setAttributes;\n\n setAttributes({\n gracefulFailure: !gracefulFailure\n });\n }\n }, {\n key: 'onChangeFailureMessage',\n\n\n /**\n * @description Handle component failureMessage update\n * @param {string} failureMessage\n */\n value: function onChangeFailureMessage(message) {\n this.props.setAttributes({\n failureMessage: message\n });\n }\n\n /**\n * @description Handle component failureMessageInsert update\n * @param {string} failureMessageInsert\n */\n\n }, {\n key: 'onChangeFailureMessageInsert',\n value: function onChangeFailureMessageInsert(position) {\n this.props.setAttributes({\n failureMessageInsert: position\n });\n }\n\n /**\n * @description Handle component minimumOverflow update\n * @param {string} minimumOverflow\n */\n\n }, {\n key: 'onChangeMinimumOverflow',\n value: function onChangeMinimumOverflow(value) {\n this.props.setAttributes({\n minimumOverflow: value\n });\n }\n\n /**\n * @description Handle component displayMeta update\n * @param none\n */\n\n }, {\n key: 'onChangeDisplayMeta',\n value: function onChangeDisplayMeta() {\n var _props5 = this.props,\n displayMeta = _props5.attributes.displayMeta,\n setAttributes = _props5.setAttributes;\n\n setAttributes({\n displayMeta: !displayMeta\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _props6 = this.props,\n isSelected = _props6.isSelected,\n className = _props6.className,\n image = _props6.image,\n _props6$attributes = _props6.attributes,\n url = _props6$attributes.url,\n id = _props6$attributes.id,\n alt = _props6$attributes.alt,\n title = _props6$attributes.title,\n containerHeight = _props6$attributes.containerHeight,\n startPosition = _props6$attributes.startPosition,\n gracefulFailure = _props6$attributes.gracefulFailure,\n failureMessage = _props6$attributes.failureMessage,\n failureMessageInsert = _props6$attributes.failureMessageInsert,\n minimumOverflow = _props6$attributes.minimumOverflow,\n displayMeta = _props6$attributes.displayMeta;\n\n\n var panoramaStyle = {\n height: containerHeight + 'px'\n };\n\n if (!url && image) {\n return [wp.element.createElement(\n Placeholder,\n {\n key: 'easypanorama-loading',\n icon: 'cover-image',\n label: __('Panorama'),\n className: 'easypanorama-loading'\n },\n wp.element.createElement(\n 'span',\n null,\n __('Loading...')\n )\n )];\n }\n\n if (!url && !image) {\n return [wp.element.createElement(MediaPlaceholder, {\n key: 'easypanorama-placeholder',\n icon: 'cover-image',\n labels: {\n title: __('Panorama'),\n name: __('images')\n },\n className: className,\n onSelect: this.onSelectImage,\n accept: 'image/*',\n allowedTypes: ALLOWED_MEDIA_TYPES\n })];\n };\n\n var controls = isSelected && wp.element.createElement(\n BlockControls,\n { key: 'easypanorama-controls' },\n wp.element.createElement(\n Toolbar,\n { key: 'easypanorama-toolbar' },\n wp.element.createElement(\n MediaUploadCheck,\n null,\n wp.element.createElement(MediaUpload, {\n key: 'easypanorama-mediaupload',\n onSelect: this.onSelectImage,\n allowedTypes: ALLOWED_MEDIA_TYPES,\n value: this.id,\n render: function render(_ref) {\n var open = _ref.open;\n return wp.element.createElement(IconButton, {\n key: 'easypanorama-openmedia',\n className: 'components-toolbar__control',\n label: __('Edit image'),\n icon: 'edit',\n onClick: open\n });\n }\n })\n )\n )\n );\n\n return [controls, isSelected && wp.element.createElement(\n InspectorControls,\n { key: 'easypanorama-inspector' },\n wp.element.createElement(\n PanelBody,\n { title: __('Panorama settings'), key: 'easypanorama-inspector-settings' },\n wp.element.createElement(TextControl, {\n key: 'easypanorama-control-containerHeight',\n label: __('Container height'),\n help: __('Insert the height for this panoramic image container.'),\n type: 'number',\n value: containerHeight,\n onChange: this.onChangeContainerHeight\n }),\n wp.element.createElement(RangeControl, {\n key: 'easypanorama-control-startPosition',\n label: __('Start position'),\n help: __('Determines the start position of the panorama: insert a value from 0 (left) to 10 (right).'),\n value: startPosition,\n onChange: this.onChangeStartPosition,\n min: 0,\n max: 10\n }),\n wp.element.createElement(ToggleControl, {\n key: 'easypanorama-control-displayMeta',\n label: __('Show meta on overlay'),\n checked: displayMeta,\n onChange: this.onChangeDisplayMeta\n }),\n displayMeta && wp.element.createElement(TextControl, {\n key: 'easypanorama-control-title',\n label: __('Title'),\n value: title,\n onChange: this.onChangeMediaTitle\n }),\n displayMeta && wp.element.createElement(TextControl, {\n key: 'easypanorama-control-alt',\n label: __('Description'),\n value: alt,\n onChange: this.onChangeMediaAlt\n })\n ),\n wp.element.createElement(\n PanelBody,\n { title: __('Advanced settings'), key: 'easypanorama-inspector-advanced' },\n wp.element.createElement(TextControl, {\n key: 'easypanorama-control-minimumOverflow',\n label: __('Minimum overflow'),\n help: __('The excess width in pixels the container must have before panorama kicks in.'),\n type: 'number',\n value: minimumOverflow,\n onChange: this.onChangeMinimumOverflow\n }),\n wp.element.createElement(ToggleControl, {\n key: 'easypanorama-control-gracefulFailure',\n label: __('Insert failure message'),\n checked: gracefulFailure,\n onChange: this.onChangeGracefulFailure\n }),\n gracefulFailure && wp.element.createElement(SelectControl, {\n key: 'easypanorama-control-failureMessageInsert',\n label: __('Position'),\n value: failureMessageInsert,\n options: [{ value: 'after', label: 'After the panorama container' }, { value: 'before', label: 'Before the panorama container' }],\n onChange: this.onChangeFailureMessageInsert\n }),\n gracefulFailure && wp.element.createElement(TextControl, {\n key: 'easypanorama-control-failureMessage',\n label: __('Message'),\n help: __('This message will appear in mobile devices with no gyroscopic data or no physical orientation support.'),\n value: failureMessage,\n onChange: this.onChangeFailureMessage\n })\n )\n ), wp.element.createElement(\n 'div',\n { className: className, key: 'epblock' },\n wp.element.createElement(\n 'div',\n { style: panoramaStyle, className: 'epblock__image-container', key: 'easypanorama-block' },\n wp.element.createElement('img', { src: url, alt: alt, title: title, className: 'wp-image-' + id, key: 'easypanorama-block-image' })\n ),\n wp.element.createElement(\n 'div',\n { className: 'epblock__help-text', key: 'easypanorama-block-help' },\n wp.element.createElement(\n Tooltip,\n { text: __('This is a preview, some features are not available.'), key: 'easypanorama-block-help-tooltip' },\n wp.element.createElement(\n 'span',\n { className: 'epblock__help-icon', key: 'easypanorama-block-help-icon-container' },\n wp.element.createElement(Dashicon, { size: '25', icon: 'info', key: 'easypanorama-block-help-icon' })\n )\n )\n )\n )];\n }\n }]);\n\n return PanoramaBlock;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withSelect(function (select, ownProps) {\n var _select = select('core'),\n getMedia = _select.getMedia;\n\n var id = ownProps.attributes.id;\n\n return {\n image: id ? getMedia(id) : null\n };\n})(PanoramaBlock));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Jsb2NrLmpzPzM4OTciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX18gPSB3cC5pMThuLl9fO1xudmFyIENvbXBvbmVudCA9IHdwLmVsZW1lbnQuQ29tcG9uZW50O1xudmFyIF93cCRlZGl0b3IgPSB3cC5lZGl0b3IsXG4gICAgTWVkaWFQbGFjZWhvbGRlciA9IF93cCRlZGl0b3IuTWVkaWFQbGFjZWhvbGRlcixcbiAgICBNZWRpYVVwbG9hZCA9IF93cCRlZGl0b3IuTWVkaWFVcGxvYWQsXG4gICAgTWVkaWFVcGxvYWRDaGVjayA9IF93cCRlZGl0b3IuTWVkaWFVcGxvYWRDaGVjayxcbiAgICBCbG9ja0NvbnRyb2xzID0gX3dwJGVkaXRvci5CbG9ja0NvbnRyb2xzLFxuICAgIEluc3BlY3RvckNvbnRyb2xzID0gX3dwJGVkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgVG9vbGJhciA9IF93cCRjb21wb25lbnRzLlRvb2xiYXIsXG4gICAgSWNvbkJ1dHRvbiA9IF93cCRjb21wb25lbnRzLkljb25CdXR0b24sXG4gICAgUmFuZ2VDb250cm9sID0gX3dwJGNvbXBvbmVudHMuUmFuZ2VDb250cm9sLFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sLFxuICAgIFRleHRDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVGV4dENvbnRyb2wsXG4gICAgU2VsZWN0Q29udHJvbCA9IF93cCRjb21wb25lbnRzLlNlbGVjdENvbnRyb2wsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIERhc2hpY29uID0gX3dwJGNvbXBvbmVudHMuRGFzaGljb24sXG4gICAgVG9vbHRpcCA9IF93cCRjb21wb25lbnRzLlRvb2x0aXAsXG4gICAgUGxhY2Vob2xkZXIgPSBfd3AkY29tcG9uZW50cy5QbGFjZWhvbGRlcjtcbnZhciB3aXRoU2VsZWN0ID0gd3AuZGF0YS53aXRoU2VsZWN0O1xuXG5cbnZhciBBTExPV0VEX01FRElBX1RZUEVTID0gWydpbWFnZSddO1xuXG52YXIgUGFub3JhbWFCbG9jayA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhQYW5vcmFtYUJsb2NrLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBQYW5vcmFtYUJsb2NrKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYW5vcmFtYUJsb2NrKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChQYW5vcmFtYUJsb2NrLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUGFub3JhbWFCbG9jaykpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXG4gICAgX3RoaXMuc2V0SW1hZ2VEYXRhID0gX3RoaXMuc2V0SW1hZ2VEYXRhLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uU2VsZWN0SW1hZ2UgPSBfdGhpcy5vblNlbGVjdEltYWdlLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlTWVkaWFBbHQgPSBfdGhpcy5vbkNoYW5nZU1lZGlhQWx0LmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlTWVkaWFUaXRsZSA9IF90aGlzLm9uQ2hhbmdlTWVkaWFUaXRsZS5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZUNvbnRhaW5lckhlaWdodCA9IF90aGlzLm9uQ2hhbmdlQ29udGFpbmVySGVpZ2h0LmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlU3RhcnRQb3NpdGlvbiA9IF90aGlzLm9uQ2hhbmdlU3RhcnRQb3NpdGlvbi5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZUdyYWNlZnVsRmFpbHVyZSA9IF90aGlzLm9uQ2hhbmdlR3JhY2VmdWxGYWlsdXJlLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlRmFpbHVyZU1lc3NhZ2UgPSBfdGhpcy5vbkNoYW5nZUZhaWx1cmVNZXNzYWdlLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlRmFpbHVyZU1lc3NhZ2VJbnNlcnQgPSBfdGhpcy5vbkNoYW5nZUZhaWx1cmVNZXNzYWdlSW5zZXJ0LmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlTWluaW11bU92ZXJmbG93ID0gX3RoaXMub25DaGFuZ2VNaW5pbXVtT3ZlcmZsb3cuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25DaGFuZ2VEaXNwbGF5TWV0YSA9IF90aGlzLm9uQ2hhbmdlRGlzcGxheU1ldGEuYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBhbm9yYW1hQmxvY2ssIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHVybCA9IF9wcm9wcy5hdHRyaWJ1dGVzLnVybCxcbiAgICAgICAgICBpbWFnZSA9IF9wcm9wcy5pbWFnZTtcblxuICAgICAgaWYgKCF1cmwgJiYgaW1hZ2UgJiYgaW1hZ2UuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0SW1hZ2VEYXRhKGltYWdlLmRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICB1cmwgPSBfcHJvcHMyLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgICAgIGltYWdlID0gX3Byb3BzMi5pbWFnZTtcblxuICAgICAgaWYgKCF1cmwgJiYgaW1hZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRJbWFnZURhdGEoaW1hZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgY29tcG9uZW50IGRhdGEgZnJvbSByZWNlaXZlZCBwYXJhbXNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gSW1hZ2UgZGF0YVxuICAgICAqIEByZXR1cm4ge2FycmF5fSBFcnJvcnNcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2V0SW1hZ2VEYXRhJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0SW1hZ2VEYXRhKGRhdGEpIHtcbiAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBfcHJvcHMzJGF0dHJpYnV0ZXMgPSBfcHJvcHMzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgdXJsID0gX3Byb3BzMyRhdHRyaWJ1dGVzLnVybCxcbiAgICAgICAgICBhbHQgPSBfcHJvcHMzJGF0dHJpYnV0ZXMuYWx0LFxuICAgICAgICAgIHRpdGxlID0gX3Byb3BzMyRhdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHMzLnNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIGlmICghdXJsKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgIHVybDogZGF0YS5zb3VyY2VfdXJsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFhbHQpIHtcbiAgICAgICAgc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgYWx0OiBkYXRhLmFsdF90ZXh0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICBzZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZS5yZW5kZXJlZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBpbWFnZSBzZWxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gQ29tcG9uZW50IG1lZGlhIGRhdGFcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnb25TZWxlY3RJbWFnZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uU2VsZWN0SW1hZ2UobWVkaWEpIHtcbiAgICAgIHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIHVybDogbWVkaWEudXJsLFxuICAgICAgICBpZDogbWVkaWEuaWQsXG4gICAgICAgIGFsdDogbWVkaWEuYWx0LFxuICAgICAgICB0aXRsZTogbWVkaWEudGl0bGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uQ2hhbmdlTWVkaWFBbHQnLFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBpbWFnZSBhbHQgdXBkYXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IEltYWdlIGFsdFxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZU1lZGlhQWx0KGFsdCkge1xuICAgICAgdGhpcy5wcm9wcy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgYWx0OiBhbHRcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uQ2hhbmdlTWVkaWFUaXRsZScsXG5cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBIYW5kbGUgY29tcG9uZW50IGltYWdlIHRpdGxlIHVwZGF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBJbWFnZSB0aXRsZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZU1lZGlhVGl0bGUodGl0bGUpIHtcbiAgICAgIHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIHRpdGxlOiB0aXRsZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25DaGFuZ2VDb250YWluZXJIZWlnaHQnLFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBjb250YWluZXIgaGVpZ2h0IHVwZGF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBDb250YWluZXIgaGVpZ2h0XG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlQ29udGFpbmVySGVpZ2h0KGhlaWdodCkge1xuICAgICAgdGhpcy5wcm9wcy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBOdW1iZXIoaGVpZ2h0KVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25DaGFuZ2VTdGFydFBvc2l0aW9uJyxcblxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEhhbmRsZSBjb21wb25lbnQgc3RhcnRQb3NpdGlvbiB1cGRhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhcnRQb3NpdGlvblxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZVN0YXJ0UG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICAgIHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIHN0YXJ0UG9zaXRpb246IHBvc2l0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkNoYW5nZUdyYWNlZnVsRmFpbHVyZScsXG5cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBIYW5kbGUgY29tcG9uZW50IGdyYWNlZnVsRmFpbHVyZSB1cGRhdGVcbiAgICAgKiBAcGFyYW0gbm9uZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZUdyYWNlZnVsRmFpbHVyZSgpIHtcbiAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBncmFjZWZ1bEZhaWx1cmUgPSBfcHJvcHM0LmF0dHJpYnV0ZXMuZ3JhY2VmdWxGYWlsdXJlLFxuICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHM0LnNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIHNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBncmFjZWZ1bEZhaWx1cmU6ICFncmFjZWZ1bEZhaWx1cmVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uQ2hhbmdlRmFpbHVyZU1lc3NhZ2UnLFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGNvbXBvbmVudCBmYWlsdXJlTWVzc2FnZSB1cGRhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZU1lc3NhZ2VcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VGYWlsdXJlTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICB0aGlzLnByb3BzLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBmYWlsdXJlTWVzc2FnZTogbWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEhhbmRsZSBjb21wb25lbnQgZmFpbHVyZU1lc3NhZ2VJbnNlcnQgdXBkYXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmVNZXNzYWdlSW5zZXJ0XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29uQ2hhbmdlRmFpbHVyZU1lc3NhZ2VJbnNlcnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZUZhaWx1cmVNZXNzYWdlSW5zZXJ0KHBvc2l0aW9uKSB7XG4gICAgICB0aGlzLnByb3BzLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBmYWlsdXJlTWVzc2FnZUluc2VydDogcG9zaXRpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBIYW5kbGUgY29tcG9uZW50IG1pbmltdW1PdmVyZmxvdyB1cGRhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWluaW11bU92ZXJmbG93XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29uQ2hhbmdlTWluaW11bU92ZXJmbG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VNaW5pbXVtT3ZlcmZsb3codmFsdWUpIHtcbiAgICAgIHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIG1pbmltdW1PdmVyZmxvdzogdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBIYW5kbGUgY29tcG9uZW50IGRpc3BsYXlNZXRhIHVwZGF0ZVxuICAgICAqIEBwYXJhbSBub25lXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29uQ2hhbmdlRGlzcGxheU1ldGEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZURpc3BsYXlNZXRhKCkge1xuICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpc3BsYXlNZXRhID0gX3Byb3BzNS5hdHRyaWJ1dGVzLmRpc3BsYXlNZXRhLFxuICAgICAgICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHM1LnNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIHNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBkaXNwbGF5TWV0YTogIWRpc3BsYXlNZXRhXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNTZWxlY3RlZCA9IF9wcm9wczYuaXNTZWxlY3RlZCxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfcHJvcHM2LmNsYXNzTmFtZSxcbiAgICAgICAgICBpbWFnZSA9IF9wcm9wczYuaW1hZ2UsXG4gICAgICAgICAgX3Byb3BzNiRhdHRyaWJ1dGVzID0gX3Byb3BzNi5hdHRyaWJ1dGVzLFxuICAgICAgICAgIHVybCA9IF9wcm9wczYkYXR0cmlidXRlcy51cmwsXG4gICAgICAgICAgaWQgPSBfcHJvcHM2JGF0dHJpYnV0ZXMuaWQsXG4gICAgICAgICAgYWx0ID0gX3Byb3BzNiRhdHRyaWJ1dGVzLmFsdCxcbiAgICAgICAgICB0aXRsZSA9IF9wcm9wczYkYXR0cmlidXRlcy50aXRsZSxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQgPSBfcHJvcHM2JGF0dHJpYnV0ZXMuY29udGFpbmVySGVpZ2h0LFxuICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBfcHJvcHM2JGF0dHJpYnV0ZXMuc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICBncmFjZWZ1bEZhaWx1cmUgPSBfcHJvcHM2JGF0dHJpYnV0ZXMuZ3JhY2VmdWxGYWlsdXJlLFxuICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gX3Byb3BzNiRhdHRyaWJ1dGVzLmZhaWx1cmVNZXNzYWdlLFxuICAgICAgICAgIGZhaWx1cmVNZXNzYWdlSW5zZXJ0ID0gX3Byb3BzNiRhdHRyaWJ1dGVzLmZhaWx1cmVNZXNzYWdlSW5zZXJ0LFxuICAgICAgICAgIG1pbmltdW1PdmVyZmxvdyA9IF9wcm9wczYkYXR0cmlidXRlcy5taW5pbXVtT3ZlcmZsb3csXG4gICAgICAgICAgZGlzcGxheU1ldGEgPSBfcHJvcHM2JGF0dHJpYnV0ZXMuZGlzcGxheU1ldGE7XG5cblxuICAgICAgdmFyIHBhbm9yYW1hU3R5bGUgPSB7XG4gICAgICAgIGhlaWdodDogY29udGFpbmVySGVpZ2h0ICsgJ3B4J1xuICAgICAgfTtcblxuICAgICAgaWYgKCF1cmwgJiYgaW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuIFt3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgUGxhY2Vob2xkZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiAnZWFzeXBhbm9yYW1hLWxvYWRpbmcnLFxuICAgICAgICAgICAgaWNvbjogJ2NvdmVyLWltYWdlJyxcbiAgICAgICAgICAgIGxhYmVsOiBfXygnUGFub3JhbWEnKSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Vhc3lwYW5vcmFtYS1sb2FkaW5nJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIF9fKCdMb2FkaW5nLi4uJylcbiAgICAgICAgICApXG4gICAgICAgICldO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVybCAmJiAhaW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuIFt3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoTWVkaWFQbGFjZWhvbGRlciwge1xuICAgICAgICAgIGtleTogJ2Vhc3lwYW5vcmFtYS1wbGFjZWhvbGRlcicsXG4gICAgICAgICAgaWNvbjogJ2NvdmVyLWltYWdlJyxcbiAgICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgIHRpdGxlOiBfXygnUGFub3JhbWEnKSxcbiAgICAgICAgICAgIG5hbWU6IF9fKCdpbWFnZXMnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgb25TZWxlY3Q6IHRoaXMub25TZWxlY3RJbWFnZSxcbiAgICAgICAgICBhY2NlcHQ6ICdpbWFnZS8qJyxcbiAgICAgICAgICBhbGxvd2VkVHlwZXM6IEFMTE9XRURfTUVESUFfVFlQRVNcbiAgICAgICAgfSldO1xuICAgICAgfTtcblxuICAgICAgdmFyIGNvbnRyb2xzID0gaXNTZWxlY3RlZCAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIEJsb2NrQ29udHJvbHMsXG4gICAgICAgIHsga2V5OiAnZWFzeXBhbm9yYW1hLWNvbnRyb2xzJyB9LFxuICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgVG9vbGJhcixcbiAgICAgICAgICB7IGtleTogJ2Vhc3lwYW5vcmFtYS10b29sYmFyJyB9LFxuICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIE1lZGlhVXBsb2FkQ2hlY2ssXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KE1lZGlhVXBsb2FkLCB7XG4gICAgICAgICAgICAgIGtleTogJ2Vhc3lwYW5vcmFtYS1tZWRpYXVwbG9hZCcsXG4gICAgICAgICAgICAgIG9uU2VsZWN0OiB0aGlzLm9uU2VsZWN0SW1hZ2UsXG4gICAgICAgICAgICAgIGFsbG93ZWRUeXBlczogQUxMT1dFRF9NRURJQV9UWVBFUyxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKF9yZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3BlbiA9IF9yZWYub3BlbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KEljb25CdXR0b24sIHtcbiAgICAgICAgICAgICAgICAgIGtleTogJ2Vhc3lwYW5vcmFtYS1vcGVubWVkaWEnLFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnY29tcG9uZW50cy10b29sYmFyX19jb250cm9sJyxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBfXygnRWRpdCBpbWFnZScpLFxuICAgICAgICAgICAgICAgICAgaWNvbjogJ2VkaXQnLFxuICAgICAgICAgICAgICAgICAgb25DbGljazogb3BlblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIFtjb250cm9scywgaXNTZWxlY3RlZCAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIEluc3BlY3RvckNvbnRyb2xzLFxuICAgICAgICB7IGtleTogJ2Vhc3lwYW5vcmFtYS1pbnNwZWN0b3InIH0sXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgeyB0aXRsZTogX18oJ1Bhbm9yYW1hIHNldHRpbmdzJyksIGtleTogJ2Vhc3lwYW5vcmFtYS1pbnNwZWN0b3Itc2V0dGluZ3MnIH0sXG4gICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICBrZXk6ICdlYXN5cGFub3JhbWEtY29udHJvbC1jb250YWluZXJIZWlnaHQnLFxuICAgICAgICAgICAgbGFiZWw6IF9fKCdDb250YWluZXIgaGVpZ2h0JyksXG4gICAgICAgICAgICBoZWxwOiBfXygnSW5zZXJ0IHRoZSBoZWlnaHQgZm9yIHRoaXMgcGFub3JhbWljIGltYWdlIGNvbnRhaW5lci4nKSxcbiAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgdmFsdWU6IGNvbnRhaW5lckhlaWdodCxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlQ29udGFpbmVySGVpZ2h0XG4gICAgICAgICAgfSksXG4gICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFJhbmdlQ29udHJvbCwge1xuICAgICAgICAgICAga2V5OiAnZWFzeXBhbm9yYW1hLWNvbnRyb2wtc3RhcnRQb3NpdGlvbicsXG4gICAgICAgICAgICBsYWJlbDogX18oJ1N0YXJ0IHBvc2l0aW9uJyksXG4gICAgICAgICAgICBoZWxwOiBfXygnRGV0ZXJtaW5lcyB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHBhbm9yYW1hOiBpbnNlcnQgYSB2YWx1ZSBmcm9tIDAgKGxlZnQpIHRvIDEwIChyaWdodCkuJyksXG4gICAgICAgICAgICB2YWx1ZTogc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlU3RhcnRQb3NpdGlvbixcbiAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgIG1heDogMTBcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuICAgICAgICAgICAga2V5OiAnZWFzeXBhbm9yYW1hLWNvbnRyb2wtZGlzcGxheU1ldGEnLFxuICAgICAgICAgICAgbGFiZWw6IF9fKCdTaG93IG1ldGEgb24gb3ZlcmxheScpLFxuICAgICAgICAgICAgY2hlY2tlZDogZGlzcGxheU1ldGEsXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZURpc3BsYXlNZXRhXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGlzcGxheU1ldGEgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICBrZXk6ICdlYXN5cGFub3JhbWEtY29udHJvbC10aXRsZScsXG4gICAgICAgICAgICBsYWJlbDogX18oJ1RpdGxlJyksXG4gICAgICAgICAgICB2YWx1ZTogdGl0bGUsXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZU1lZGlhVGl0bGVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXNwbGF5TWV0YSAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVGV4dENvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogJ2Vhc3lwYW5vcmFtYS1jb250cm9sLWFsdCcsXG4gICAgICAgICAgICBsYWJlbDogX18oJ0Rlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICB2YWx1ZTogYWx0LFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VNZWRpYUFsdFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBQYW5lbEJvZHksXG4gICAgICAgICAgeyB0aXRsZTogX18oJ0FkdmFuY2VkIHNldHRpbmdzJyksIGtleTogJ2Vhc3lwYW5vcmFtYS1pbnNwZWN0b3ItYWR2YW5jZWQnIH0sXG4gICAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICBrZXk6ICdlYXN5cGFub3JhbWEtY29udHJvbC1taW5pbXVtT3ZlcmZsb3cnLFxuICAgICAgICAgICAgbGFiZWw6IF9fKCdNaW5pbXVtIG92ZXJmbG93JyksXG4gICAgICAgICAgICBoZWxwOiBfXygnVGhlIGV4Y2VzcyB3aWR0aCBpbiBwaXhlbHMgdGhlIGNvbnRhaW5lciBtdXN0IGhhdmUgYmVmb3JlIHBhbm9yYW1hIGtpY2tzIGluLicpLFxuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICB2YWx1ZTogbWluaW11bU92ZXJmbG93LFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VNaW5pbXVtT3ZlcmZsb3dcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9nZ2xlQ29udHJvbCwge1xuICAgICAgICAgICAga2V5OiAnZWFzeXBhbm9yYW1hLWNvbnRyb2wtZ3JhY2VmdWxGYWlsdXJlJyxcbiAgICAgICAgICAgIGxhYmVsOiBfXygnSW5zZXJ0IGZhaWx1cmUgbWVzc2FnZScpLFxuICAgICAgICAgICAgY2hlY2tlZDogZ3JhY2VmdWxGYWlsdXJlLFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VHcmFjZWZ1bEZhaWx1cmVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBncmFjZWZ1bEZhaWx1cmUgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRyb2wsIHtcbiAgICAgICAgICAgIGtleTogJ2Vhc3lwYW5vcmFtYS1jb250cm9sLWZhaWx1cmVNZXNzYWdlSW5zZXJ0JyxcbiAgICAgICAgICAgIGxhYmVsOiBfXygnUG9zaXRpb24nKSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWlsdXJlTWVzc2FnZUluc2VydCxcbiAgICAgICAgICAgIG9wdGlvbnM6IFt7IHZhbHVlOiAnYWZ0ZXInLCBsYWJlbDogJ0FmdGVyIHRoZSBwYW5vcmFtYSBjb250YWluZXInIH0sIHsgdmFsdWU6ICdiZWZvcmUnLCBsYWJlbDogJ0JlZm9yZSB0aGUgcGFub3JhbWEgY29udGFpbmVyJyB9XSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlRmFpbHVyZU1lc3NhZ2VJbnNlcnRcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBncmFjZWZ1bEZhaWx1cmUgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRleHRDb250cm9sLCB7XG4gICAgICAgICAgICBrZXk6ICdlYXN5cGFub3JhbWEtY29udHJvbC1mYWlsdXJlTWVzc2FnZScsXG4gICAgICAgICAgICBsYWJlbDogX18oJ01lc3NhZ2UnKSxcbiAgICAgICAgICAgIGhlbHA6IF9fKCdUaGlzIG1lc3NhZ2Ugd2lsbCBhcHBlYXIgaW4gbW9iaWxlIGRldmljZXMgd2l0aCBubyBneXJvc2NvcGljIGRhdGEgb3Igbm8gcGh5c2ljYWwgb3JpZW50YXRpb24gc3VwcG9ydC4nKSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWlsdXJlTWVzc2FnZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlRmFpbHVyZU1lc3NhZ2VcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApLCB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7IGNsYXNzTmFtZTogY2xhc3NOYW1lLCBrZXk6ICdlcGJsb2NrJyB9LFxuICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgeyBzdHlsZTogcGFub3JhbWFTdHlsZSwgY2xhc3NOYW1lOiAnZXBibG9ja19faW1hZ2UtY29udGFpbmVyJywga2V5OiAnZWFzeXBhbm9yYW1hLWJsb2NrJyB9LFxuICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJywgeyBzcmM6IHVybCwgYWx0OiBhbHQsIHRpdGxlOiB0aXRsZSwgY2xhc3NOYW1lOiAnd3AtaW1hZ2UtJyArIGlkLCBrZXk6ICdlYXN5cGFub3JhbWEtYmxvY2staW1hZ2UnIH0pXG4gICAgICAgICksXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2VwYmxvY2tfX2hlbHAtdGV4dCcsIGtleTogJ2Vhc3lwYW5vcmFtYS1ibG9jay1oZWxwJyB9LFxuICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFRvb2x0aXAsXG4gICAgICAgICAgICB7IHRleHQ6IF9fKCdUaGlzIGlzIGEgcHJldmlldywgc29tZSBmZWF0dXJlcyBhcmUgbm90IGF2YWlsYWJsZS4nKSwga2V5OiAnZWFzeXBhbm9yYW1hLWJsb2NrLWhlbHAtdG9vbHRpcCcgfSxcbiAgICAgICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2VwYmxvY2tfX2hlbHAtaWNvbicsIGtleTogJ2Vhc3lwYW5vcmFtYS1ibG9jay1oZWxwLWljb24tY29udGFpbmVyJyB9LFxuICAgICAgICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoRGFzaGljb24sIHsgc2l6ZTogJzI1JywgaWNvbjogJ2luZm8nLCBrZXk6ICdlYXN5cGFub3JhbWEtYmxvY2staGVscC1pY29uJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKV07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBhbm9yYW1hQmxvY2s7XG59KENvbXBvbmVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTZWxlY3QoZnVuY3Rpb24gKHNlbGVjdCwgb3duUHJvcHMpIHtcbiAgdmFyIF9zZWxlY3QgPSBzZWxlY3QoJ2NvcmUnKSxcbiAgICAgIGdldE1lZGlhID0gX3NlbGVjdC5nZXRNZWRpYTtcblxuICB2YXIgaWQgPSBvd25Qcm9wcy5hdHRyaWJ1dGVzLmlkO1xuXG4gIHJldHVybiB7XG4gICAgaW1hZ2U6IGlkID8gZ2V0TWVkaWEoaWQpIDogbnVsbFxuICB9O1xufSkoUGFub3JhbWFCbG9jayk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ibG9jay5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n"); 91 91 92 92 /***/ }) -
easy-panorama/trunk/block/dist/editor.css
r1864376 r1995612 1 . wp-block-easy-panorama-block{position:relative}.wp-block-easy-panorama-block .panorama--help-text{position:absolute;top:0;right:0}.wp-block-easy-panorama-block .panorama--help-icon{display:inline-block;padding:5px;color:#fff}.panorama--image{height:400px;overflow-x:scroll;overflow-y:hidden}.panorama--image img{height:100%;max-width:none}1 .epblock{position:relative}.epblock__image-container{height:400px;overflow-x:scroll;overflow-y:hidden}.epblock__image-container img{height:100%;max-width:none}.epblock__help-text{position:absolute;bottom:0;right:0;line-height:0}.epblock__help-icon{display:inline-block;padding:10px;color:#fff} -
easy-panorama/trunk/block/src/block.js
r1936503 r1995612 6 6 MediaPlaceholder, 7 7 MediaUpload, 8 MediaUploadCheck, 8 9 BlockControls, 9 10 InspectorControls … … 25 26 const { withSelect } = wp.data; 26 27 28 const ALLOWED_MEDIA_TYPES = [ 'image' ]; 27 29 28 30 class PanoramaBlock extends Component { … … 234 236 onSelect={ this.onSelectImage } 235 237 accept="image/*" 236 type="image"238 allowedTypes={ ALLOWED_MEDIA_TYPES } 237 239 /> 238 240 ] … … 243 245 <BlockControls key="easypanorama-controls"> 244 246 <Toolbar key="easypanorama-toolbar"> 245 <MediaUpload 246 key="easypanorama-mediaupload" 247 onSelect={ this.onSelectImage } 248 type="image" 249 value={ this.id } 250 render={ ( { open } ) => ( 251 <IconButton 252 key="easypanorama-openmedia" 253 className="components-toolbar__control" 254 label={ __( 'Edit image' ) } 255 icon="edit" 256 onClick={ open } 257 /> 258 ) } 259 /> 247 <MediaUploadCheck> 248 <MediaUpload 249 key="easypanorama-mediaupload" 250 onSelect={ this.onSelectImage } 251 allowedTypes={ ALLOWED_MEDIA_TYPES } 252 value={ this.id } 253 render={ ( { open } ) => ( 254 <IconButton 255 key="easypanorama-openmedia" 256 className="components-toolbar__control" 257 label={ __( 'Edit image' ) } 258 icon="edit" 259 onClick={ open } 260 /> 261 ) } 262 /> 263 </MediaUploadCheck> 260 264 </Toolbar> 261 265 </BlockControls> … … 347 351 </InspectorControls> 348 352 ), 349 <div className={ className } key="e asypanorama-block-editor">350 <div style={ panoramaStyle } className=" panorama--image" key="easypanorama-panorama-container">351 <img src={ url } alt={ alt } title={ title } className={`wp-image-${ id }`} key="easypanorama- panorama-image"/>353 <div className={ className } key="epblock"> 354 <div style={ panoramaStyle } className="epblock__image-container" key="easypanorama-block"> 355 <img src={ url } alt={ alt } title={ title } className={`wp-image-${ id }`} key="easypanorama-block-image"/> 352 356 </div> 353 < span className="panorama--help-text" key="easypanorama-block-help">357 <div className="epblock__help-text" key="easypanorama-block-help"> 354 358 <Tooltip text={ __( 'This is a preview, some features are not available.' ) } key="easypanorama-block-help-tooltip"> 355 <span className=" panorama--help-icon" key="easypanorama-block-help-icon-container">359 <span className="epblock__help-icon" key="easypanorama-block-help-icon-container"> 356 360 <Dashicon size="25" icon="info" key="easypanorama-block-help-icon"/> 357 361 </span> 358 362 </Tooltip> 359 </ span>363 </div> 360 364 </div> 361 365 ]; -
easy-panorama/trunk/block/src/editor.scss
r1864376 r1995612 1 1 /* Easy Panorama Editor Styles */ 2 . wp-block-easy-panorama-block {2 .epblock { 3 3 position: relative; 4 .panorama--help-text { 4 5 &__image-container { 6 height: 400px; 7 overflow-x: scroll; 8 overflow-y: hidden; 9 img { 10 height: 100%; 11 max-width: none; 12 } 13 } 14 15 &__help-text { 5 16 position: absolute; 6 top: 0;17 bottom: 0; 7 18 right: 0; 19 line-height: 0; 8 20 } 9 .panorama--help-icon { 21 22 &__help-icon { 10 23 display: inline-block; 11 padding: 5px;24 padding: 10px; 12 25 color: #fff; 13 26 } 14 27 } 15 16 .panorama--image {17 height: 400px;18 overflow-x: scroll;19 overflow-y: hidden;20 img {21 height: 100%;22 max-width: none;23 }24 } -
easy-panorama/trunk/easy-panorama.php
r1936503 r1995612 12 12 * Plugin URI: https://github.com/leopuleo 13 13 * Description: Embed interactive wide/panoramic images on your site. Optimised for responsive layouts, it works great with devices equipped with motion sensors. 14 * Version: 1.1. 314 * Version: 1.1.4 15 15 * Author: Leonardo Giacone 16 16 * Author URI: https://github.com/leopuleo -
easy-panorama/trunk/includes/class-easy-panorama.php
r1936503 r1995612 99 99 100 100 $this->plugin_name = 'easy-panorama'; 101 $this->version = '1.1. 3';101 $this->version = '1.1.4'; 102 102 $this->plugin_basename = plugin_basename(plugin_dir_path(__DIR__) . $this->plugin_name . '.php'); 103 103 -
easy-panorama/trunk/readme.txt
r1936503 r1995612 4 4 Donate link: https://paypal.me/LeonardoGiacone 5 5 Requires at least: 4.5 6 Tested up to: 4.96 Tested up to: 5.0 7 7 Requires PHP: 5.6 8 Stable tag: 1.1. 38 Stable tag: 1.1.4 9 9 License: GPL-2.0+ 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.txt … … 117 117 == Changelog == 118 118 119 = 1.1.4 (15/12/2018) = 120 * Bug fix: Added <code><MediaUploadCheck></code> + <code>allowedType</code> control 121 * Design: Moved tooltip help icon at bottom/right corner of the block 122 119 123 = 1.1.3 (05/08/2018) = 120 124 * Bug fix: Replaced <code>withAPIData</code> with <code>withSelect</code>
Note: See TracChangeset
for help on using the changeset viewer.