openstax_utilities 4.1.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +5 -5
  2. data/app/routines/openstax/utilities/limit_and_paginate_relation.rb +85 -0
  3. data/app/routines/openstax/utilities/order_relation.rb +105 -0
  4. data/app/routines/openstax/utilities/search_and_organize_relation.rb +130 -0
  5. data/app/routines/openstax/utilities/search_relation.rb +94 -0
  6. data/lib/openstax/utilities/access_policy.rb +4 -3
  7. data/lib/openstax/utilities/assets.rb +29 -0
  8. data/lib/openstax/utilities/assets/manifest.rb +62 -0
  9. data/lib/openstax/utilities/version.rb +1 -1
  10. data/lib/openstax_utilities.rb +5 -5
  11. data/spec/cassettes/OpenStax_Utilities_Assets/loading_remote_manifest/uses_remote_json.yml +353 -0
  12. data/spec/dummy/app/access_policies/dummier_access_policy.rb +10 -0
  13. data/spec/dummy/app/assets/config/manifest.js +3 -0
  14. data/spec/dummy/config/application.rb +6 -11
  15. data/spec/dummy/config/environments/test.rb +1 -1
  16. data/spec/dummy/config/initializers/search_users.rb +26 -0
  17. data/spec/dummy/config/secrets.yml +2 -5
  18. data/spec/dummy/db/test.sqlite3 +0 -0
  19. data/spec/dummy/log/test.log +32144 -0
  20. data/spec/dummy/tmp/cache/C09/760/6da7b2a29da9cb0f80ef102c7effb91fab3374db +0 -0
  21. data/spec/factories/user.rb +1 -1
  22. data/spec/lib/openstax/utilities/access_policy_spec.rb +16 -15
  23. data/spec/lib/openstax/utilities/assets_spec.rb +40 -0
  24. data/spec/rails_helper.rb +1 -2
  25. data/spec/routines/openstax/utilities/limit_and_paginate_relation_spec.rb +72 -0
  26. data/spec/routines/openstax/utilities/order_relation_spec.rb +55 -0
  27. data/spec/routines/openstax/utilities/{abstract_keyword_search_routine_spec.rb → search_and_organize_relation_spec.rb} +54 -47
  28. data/spec/routines/openstax/utilities/search_relation_spec.rb +81 -0
  29. data/spec/vcr_helper.rb +18 -0
  30. metadata +123 -44
  31. data/app/handlers/openstax/utilities/keyword_search_handler.rb +0 -95
  32. data/app/routines/openstax/utilities/abstract_keyword_search_routine.rb +0 -158
  33. data/spec/dummy/app/routines/search_users.rb +0 -21
  34. data/spec/handlers/openstax/utilities/keyword_search_handler_spec.rb +0 -126
@@ -0,0 +1,29 @@
1
+ require 'request_store'
2
+ require_relative 'assets/manifest'
3
+
4
+ module OpenStax::Utilities
5
+ module Assets
6
+ def self.url
7
+ url = Rails.application.secrets.assets_url
8
+ url.ends_with?('/') ? url : "#{url}/"
9
+ end
10
+
11
+ def self.url_for(asset)
12
+ "#{url}#{asset}"
13
+ end
14
+
15
+ def self.manifest
16
+ RequestStore.store[:assets_manifest] ||= OpenStax::Utilities::Assets::Manifest.new
17
+ end
18
+
19
+ def self.tags_for(asset)
20
+ manifest[asset].map do |chunk|
21
+ "<script type='text/javascript' src='#{chunk}' crossorigin='anonymous' async></script>"
22
+ end.join("\n").html_safe
23
+ end
24
+
25
+ def self.digest_for(asset)
26
+ Digest::MD5.hexdigest tags_for(asset)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,62 @@
1
+ require 'faraday'
2
+ require 'faraday-http-cache'
3
+
4
+ module OpenStax::Utilities
5
+ module Assets
6
+ # Reads and parses the assets manifest
7
+ class Manifest
8
+ def initialize
9
+ @assets = HashWithIndifferentAccess.new
10
+
11
+ url = OpenStax::Utilities::Assets.url_for('assets.json')
12
+
13
+ begin
14
+ response = self.class.client.get url
15
+
16
+ if response.success?
17
+ contents = JSON.parse response.body
18
+
19
+ if contents['entrypoints'].blank?
20
+ Rails.logger.error { "failed to parse manifest from #{url}" }
21
+ else
22
+ contents['entrypoints'].each do |entry_key, chunks|
23
+ @assets[entry_key] = chunks['js'].map do |chunk|
24
+ OpenStax::Utilities::Assets.url_for(chunk)
25
+ end
26
+ end
27
+ end
28
+ else
29
+ Rails.logger.error { "status #{response.status} when reading remote url: #{url}" }
30
+ end
31
+ rescue Faraday::ConnectionFailed, Addressable::URI::InvalidURIError, Errno::ECONNREFUSED
32
+ end
33
+
34
+ Rails.logger.info do
35
+ "running in development mode with assets served by webpack at #{
36
+ OpenStax::Utilities::Assets.url
37
+ }"
38
+ end if @assets.blank?
39
+ end
40
+
41
+ def [](asset)
42
+ return [ OpenStax::Utilities::Assets.url_for("#{asset}.js") ] if @assets.blank?
43
+
44
+ @assets[asset] || []
45
+ end
46
+
47
+ protected
48
+
49
+ # Faraday is probably thread-safe but makes no guarantees
50
+ # https://github.com/lostisland/faraday/issues/370
51
+ # We could potentially reuse the client object
52
+ # However, bugs happen: https://github.com/lostisland/faraday/issues/1068
53
+ def self.client
54
+ Faraday.new do |builder|
55
+ builder.use :http_cache, store: Rails.cache
56
+
57
+ builder.adapter Faraday.default_adapter
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,5 +1,5 @@
1
1
  module OpenStax
2
2
  module Utilities
3
- VERSION = "4.1.0"
3
+ VERSION = '4.3.0'
4
4
  end
5
5
  end
@@ -19,6 +19,7 @@ require "openstax/utilities/acts_as_numberable"
19
19
  require "openstax/utilities/delegate_access_control"
20
20
  require "openstax/utilities/access_policy"
21
21
  require "openstax/utilities/osu_helper"
22
+ require "openstax/utilities/assets"
22
23
 
23
24
  module OpenStax
24
25
  module Utilities
@@ -35,7 +36,7 @@ module OpenStax
35
36
  #
36
37
  # Configuration machinery.
37
38
  #
38
- # To configure OpenStax Utilities, put the following code in your applications
39
+ # To configure OpenStax Utilities, put the following code in your applications
39
40
  # initialization logic (eg. in the config/initializers in a Rails app)
40
41
  #
41
42
  # OpenStax::Utilities.configure do |config|
@@ -43,7 +44,7 @@ module OpenStax
43
44
  # ...
44
45
  # end
45
46
  #
46
-
47
+
47
48
  def configure
48
49
  yield configuration
49
50
  end
@@ -56,8 +57,8 @@ module OpenStax
56
57
  attr_accessor :standard_date_format
57
58
  attr_accessor :standard_datetime_format
58
59
  attr_accessor :standard_time_format
59
-
60
- def initialize
60
+
61
+ def initialize
61
62
  @standard_date_format = "%b %d, %Y"
62
63
  @standard_datetime_format = "%b %d, %Y %l:%M %p %Z"
63
64
  @standard_time_format = "%l:%M %p %Z"
@@ -69,4 +70,3 @@ module OpenStax
69
70
 
70
71
  end
71
72
  end
72
-
@@ -0,0 +1,353 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://tutor-dev.openstax.org/assets/assets.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.2
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - nginx
23
+ Date:
24
+ - Thu, 13 Sep 2018 17:45:53 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Content-Length:
28
+ - '404'
29
+ Last-Modified:
30
+ - Fri, 31 Aug 2018 21:21:15 GMT
31
+ Connection:
32
+ - keep-alive
33
+ Etag:
34
+ - '"5b89b14b-194"'
35
+ Expires:
36
+ - Fri, 13 Sep 2019 17:45:53 GMT
37
+ Cache-Control:
38
+ - max-age=31536000
39
+ - public
40
+ Strict-Transport-Security:
41
+ - max-age=31536000; includeSubdomains
42
+ Accept-Ranges:
43
+ - bytes
44
+ body:
45
+ encoding: UTF-8
46
+ string: |
47
+ {
48
+ "all-features.svg": {
49
+ "src": "aa24fa15d6d08eb7078616fbb038188d.svg",
50
+ "integrity": "sha256-QIcMINxIyaiYNQW9dnIvxmzMmLeQosO1bSgC7pzLpKQ= sha384-aa0rfgAhJ+iIH8CRpf4Ei0V3KlQWZ3Fh+MMMo40S0kixI692PhGM2qFvq1/3qSFx sha512-oObRARlAvemWUB3OwlW6lP6tQDuRW3YxXZ6rGXZln4cZ96sejeYJ9BOmvVSDTfGHDZHU0l6gF4VrmlBF9dCgpw=="
51
+ },
52
+ "ap_physics-book-thumbnail.svg": {
53
+ "src": "dcbb7de4327cd469d54012fcfbaf83ac.svg",
54
+ "integrity": "sha256-DWm0KEcgX5XXa3XOSmwS6lx8gYzPaS8gLquubhEGIh0= sha384-JyqJgDexFBJMAAsiDKVEoZ70dNEB6ZFP9wKgc6p+rnr+oqbwlJefSUVkgX1k454V sha512-36vObxxYPaGBDeVpzvwjKac4fGprb5H7XHNgA4IWA9x0KbIg/nzYR2uUsEu77gaHoHV3CUbEdIAc3sGc/fKf3A=="
55
+ },
56
+ "ap_us_history-book-thumbnail.svg": {
57
+ "src": "ea15eb313d33bf91c3fadc2fe7dab027.svg",
58
+ "integrity": "sha256-cR4KKeLsxiAgV+EDpAU3vVFs5FpnuhAxOc8IlBsS+Jc= sha384-+ackdSHqLVeGuZJ3ABavi/LwJnwHdKy0vDufWeNYbCvT/E7nIT5fHS7RXivfdOPf sha512-WQ5JjbuMoaV+EddeQBm9uDvbn0M8QYubb1wWAUeVkkN3clMBhMnnI551do0ulHMKCjq3ZGQHrLDfofwUELQFEQ=="
59
+ },
60
+ "biology-book-thumbnail.svg": {
61
+ "src": "09a7aa2d0aa9bc4f083ae2b514966827.svg",
62
+ "integrity": "sha256-Q8ctLwjOkI7MmE1O7fWGrUyDWTuh0SyGaUROWDSZuAU= sha384-Rft6bksJWnKoqqy+pVb3dLYFKLWGkP8AS58oZ6prX0ihX3e+WGUJbUSmlw4mPIkO sha512-zyWDI5gric8qXi4GdtSzIUBgLxvn59Plb5PhjdunS1TjpWOsxI5lG0YmnkPFCjxa63rXio4hswLoy4PHcE8igQ=="
63
+ },
64
+ "biology_2e-book-thumbnail.svg": {
65
+ "src": "2c69b48945c8869b7195c99b3bb8b390.svg",
66
+ "integrity": "sha256-Mom7+7inJVDA/6XczbQ9eZHKH9EttlLUlbX0q32WvAY= sha384-XvUUDHngymDbamwadCVvQifAel4O/77r6x2/0FnbRQGLNyAjvN9k4LBbSk85mtW+ sha512-CxMUoVkgRjj2ojALi2EHr7AxTs9+1kOQj3rDKnjFTi9CsQjBLcWotS6kZCVGttw4FjueBl1T1rsAq8EwoAZDsQ=="
67
+ },
68
+ "cant-save-work.svg": {
69
+ "src": "5ad1479c3561fa1988912b1c3e061282.svg",
70
+ "integrity": "sha256-egeZy7hvduoP9ujDJEB9fRwf/QRuZE9+e5B6yI1D1q4= sha384-I61LI2VdHk5a7lzeaNveog7TWTPncH0BzDjAVPnnMUpmAEU8yIdQAheXqbLT2OGt sha512-7pYkiymyYORnuUEdhehr4NFtk5Yy++owADUWu2NmtRVTQz3qODSvmPgysoyBaFWaAb0iJ9GzBRaw/5EiyQC3vQ=="
71
+ },
72
+ "college_physics-book-thumbnail.svg": {
73
+ "src": "aac1db15414fad4a0e79efbb886cd8f0.svg",
74
+ "integrity": "sha256-qE69BiNBc1iYcaV0nGFgMkh39eheSSpafxp2c/uqv5U= sha384-ujsnbp8Ahdy4uTPdXZ0jOp3jhvbH6QjtK8zkALqHi/UN7L0LrKlQB2zit9JiNt9U sha512-GM2S0r7q6YnBmV+7ej2iRtITX5X3R1/p6vpy+llGf8JwKn/aYyvWaFtXq74yvkN3Wo8k/ZXJiO7LqmsJHYoMpg=="
75
+ },
76
+ "entrepreneurship-book-thumbnail.svg": {
77
+ "src": "9527f9c2439d00c1d58ec28e52420e2b.svg",
78
+ "integrity": "sha256-I9i39FEBc4kHcAkgTDc1n2BAaydY/cz9nrTIZ0fFXyA= sha384-qrWWGZDEI/302XzLD2hPaRKubyplPfCPu8LKBzylmXlxu57xAbiq8Ye0U24WBxgA sha512-iBAELZ7s/y+hxwAwPutHSafTd7cyrU4P9wvykmDVTu4noK1ccC8QChc6zk2MsBynfm1ISMO0sjKlJ7Dz+H1pDg=="
79
+ },
80
+ "entrypoints": {
81
+ "tutor": {
82
+ "js": [
83
+ "tutor-b920eb0be760a7c440bf.min.js"
84
+ ],
85
+ "js.map": [
86
+ "tutor-b920eb0be760a7c440bf.min.js.map"
87
+ ]
88
+ },
89
+ "lmspair": {
90
+ "js": [
91
+ "lmspair-b920eb0be760a7c440bf.min.js"
92
+ ],
93
+ "js.map": [
94
+ "lmspair-b920eb0be760a7c440bf.min.js.map"
95
+ ]
96
+ }
97
+ },
98
+ "exclude-question.svg": {
99
+ "src": "f7460965d0f2443a757b68486a271a46.svg",
100
+ "integrity": "sha256-U0lKhNqO0f+UFKzsJDL1tO24TrsTrp+ZOwH/C3eP8iM= sha384-onoZmRrSMr22/L0ysTlsQlhUiO7O+ea+LNnEaVctuUecPdOJGE4onsGx7FRudlHZ sha512-SwHKMLIhqmUJJHI5BNCqJsN3mALz8g85MvJoGSDHm2n3cyx3F2IBjgA6aPnVzp072ZGpcK8tlil5RzgcsqTtVw=="
101
+ },
102
+ "exercise-details-action.svg": {
103
+ "src": "ade68bd7a65ec534db8f179e78173f36.svg",
104
+ "integrity": "sha256-jPGHeozXhBAfeuSt6kZg0O0SqhX/Ofg9B1HAClnXI+A= sha384-srUWMTIvZBKyzwyk+vKJ9uwZ8viObVdvP/0Xmq3blFD8w48KKm0vP8iieFQ/4njf sha512-76DO9BtdlnsUmsba/rP4H2tYXtMy2dTK/CudPTQnkESzGWiC4hbpn2aDSh8vAG/CD3ObPFo4u2Utpc/iCRm/dg=="
105
+ },
106
+ "exercise-exclude-card-view-action.svg": {
107
+ "src": "6f6a7d08a934392dfb6daae9b32e1eca.svg",
108
+ "integrity": "sha256-Ttp7m6dHS9X+6JFLpkfD4EcQPB4xKAD5kFVHuLmFGCI= sha384-sEGYw9qGeaH2C6ou+UzssORsdqVPgMkB1iOgqj+AMAQwjH89k3iu9Rcr9V8DCuXy sha512-p2DUqibi4667xwZylBV+XOseXeitmvEb28FmfPBnfyGNlMEpBFRYVb+w2/Hr8T4lZ1mZjLEJE1N7wPwTurKqLw=="
109
+ },
110
+ "exercise-exclude-details-view-action.svg": {
111
+ "src": "f03fe8cfd847898edc376bf0bdac0056.svg",
112
+ "integrity": "sha256-pO3LCOn2pMqZNaEAwG4meH5xOjfaa4EvGTvR8AxaY+k= sha384-dnKtfgmDF18YjfzV+uz7DS89doo6v3ClonG2Ak/jHIzm4gGe++wr9AmFWDHzGv72 sha512-0m84pmF3KPDwGMRrtGmM9+7ylVAO457hnomaZRXQcnLwPh7nkAP4cECf5+urSYG+o766dM3BWrUS5ZETRZCi5w=="
113
+ },
114
+ "exercise-feedback-off-action.svg": {
115
+ "src": "cc317d981b83c9468e000a4cd0cd6bd1.svg",
116
+ "integrity": "sha256-poQbe47ZyBZn/r0nVK8QlvfCStK7I3reJf31ic5XU+E= sha384-P7/nY9zRRRtpVbGA24ZIeI4mPmerty84X7uWBrzPjaUOAS2FgtnvWdbcTZnUqN2S sha512-dSge35cZIzZfaxbBzcamOyId4rTn8CWwWJ37wNf54VDcdk2h/8lTC5eLxLe5nDwQq1HZtBnnN6H9JmG4tSfdOA=="
117
+ },
118
+ "exercise-feedback-on-action.svg": {
119
+ "src": "7941f79e27c564f9778784c78a005f78.svg",
120
+ "integrity": "sha256-u0kNxYc0B/rm9U86ul3VNZByM9yNneSjvvArdW1RWDA= sha384-VU5b7mFjwluxcp72y8oupgiMswhsqYzIsj6/tHw6PoIawkt1GELqYoByDJ3erlNl sha512-mBtoqoEmzXhOUEbz4TpNclqOmLraeQbHTmM2xRFtu++sHiW1lMkX2B+a313v7laVQGr1ZDptmuItSXg/OE9rWg=="
121
+ },
122
+ "exercise-include-action.svg": {
123
+ "src": "9b3328d7b81d35b1764a709b5e2fe14a.svg",
124
+ "integrity": "sha256-yP6keVl5XVCCb7YKkvD/6zVWwcOQ7pAqgB0H0jSoafM= sha384-0YpNustNygxYxOF654o+uVJJvrZIddYOcU7wKU1zk4ayenBOUL0k/ghPvkmD+nlV sha512-R/PK9Bbxe8mRUglibbClnRpKmt3oECX2l+A8Z+bnDXVii+wQufmN23jka6oaS5TqFRF1e1DVWGHxz6oIfpbXlQ=="
125
+ },
126
+ "exercise-report-error-action.svg": {
127
+ "src": "062f41bcd1652ae1e6c77bfeb0bab7aa.svg",
128
+ "integrity": "sha256-spCoklXvyEE96RU6A7DbGn5LX3lBBMbfLLoceIRUCYM= sha384-k0nkM8JP4NWILjiRgV9R9cEOqHpnZ33AzM5qcJAetFxCn80W+6pZVedm6bKZdQcH sha512-0WueUVO8xKmGQXqf1UUFm3NAEvS0YL9m20OzOgOr0GCZpzzmhxH4DgtuOsu2I/Qj/5s9HnVYcaKeIzCSyi3h5A=="
129
+ },
130
+ "export-by.svg": {
131
+ "src": "8ef183dc2032a92a87e654ccf009c858.svg",
132
+ "integrity": "sha256-znMsZmY1bYcoxtmQV73W0dk8Lvqimu5JYxZGAKaLDrk= sha384-DenBRw8WXoI3jjlL+d28j1fQCPwpSKrjTEfxMG5nCYJT6XWyA0lwOFHppGb5siRl sha512-mnCct5NVCBZUoFLBEYmUjXpQpfwYxRAk6JDP6EFCrjy5LLGCTu85df4MbsagBX9LoVUsinzpIzckdH2stVanWg=="
133
+ },
134
+ "hs_physics-book-thumbnail.png": {
135
+ "src": "57112172ebb42b6d76439ef3c09e10a0.png",
136
+ "integrity": "sha256-X8trpVLInJlun+ilsDXvuIRUWWTTFrMNCodyGjGE00U= sha384-wZTgHHcKjYDXRa/mU3kEfgexBJUHa3+SUCDExZSX9RSz47No8RiIH8HYNQWJbc6U sha512-yXPx9yx0xlWTJ4yiDFSD+b2n63Ixvz09wV7bTvqv370IfweQVDypQjOQF4QlmuDmx8UQvLma6LVyyBECTxwebg=="
137
+ },
138
+ "icon-completed.svg": {
139
+ "src": "1eaa77438418976d919742a5f51778de.svg",
140
+ "integrity": "sha256-/K4ahQxRv8VVA4xFL4YhzPzl2850BlHndoyY6I5QmO4= sha384-AGd5sL6cIlNIkd5HRwp/DM6oyVytHeZz2VP0DnN6PoOqnTbCRUiuhqq/Wvdc74tq sha512-JFmeWiO2a8uV98fXj0wOXSYGqtGyKkdXzXqEwb4oLdB6mEbmweWYsQr1E2SsLr7AaO8IJm0sWbKSJOtmSYXQPg=="
141
+ },
142
+ "icon-copy-course.svg": {
143
+ "src": "1d0014e980c13576a550645339994b4a.svg",
144
+ "integrity": "sha256-QIPi/bNPslFUOaHnJBrp6g7Uvqyz4IzD68qsOu6WL9Y= sha384-7P3AUbnSRFGrTNfB4fLEwrM7PbvGSVS5PiIrPDuXO/Lfy99K0Ru8gvjRvHQZY6P8 sha512-wCBpSGWJsFgbT+UcEWSUzSfRhnrGRVo3t2PiGmTQ4bTTD5FveTZ1m57BalXvjM01Bf4NaUilo7aWy1L5047p+A=="
145
+ },
146
+ "icon-correct.svg": {
147
+ "src": "d62f4fb9677b23b176d92210a6e635ef.svg",
148
+ "integrity": "sha256-xNt/TBBZyJNIOve+JEo1QPmEHjDXOG+zhgJdGNWVY4c= sha384-66GlLUhSM8fjCEYhQe8jpj2YxoJmDxrhbf6cFFZKXs2lSp37pWwcb9jZFSoFx4NX sha512-EX/6y1IKJDKllghlw6eYxCICFXpkWzC+sOzxIr8bJ6tT/QQ/fapWqMXwGJFyEObfhj+KcO9KwI4zl8e9Tv6Xjw=="
149
+ },
150
+ "icon-end.svg": {
151
+ "src": "5296aaa9429bfe5364c92abde90b4edc.svg",
152
+ "integrity": "sha256-BXtydxlsc1UFcXLNGICzgSi1AAleC4V/MHFo3GmofHo= sha384-xnAT7T4PYBriYONAxS9fe8MaPuMfGFXqEb8dyXWAN0CqZwg9E3qQE4JDXPAJYSiw sha512-cAw2abfRDgnsFKfFkb9ZjUeov0AahzebMlDc9vKr7+PAwSmvzfHowgNGvRQc99nDAXALUwbtuNPqO5k0lbZLog=="
153
+ },
154
+ "icon-event.svg": {
155
+ "src": "fa1d0a374b1f522c38359988bf6e1397.svg",
156
+ "integrity": "sha256-pP/L+KKaa88C4cdigU270H2BnnFgok5DJR3WmvSNqbA= sha384-PafVjCvOmkOHIwcKLViwNuAvEqvafJ3dmuEFeLuptY+yi7uu8MOSZhYvFuC2oJWy sha512-zsjD8duZuW3hSIOfdmuC8Ir2h1al6lvobuoNBUy5L7oA55PLn0d5ctr34jbjp4OarvDAWtYGAUlhAOfd8r6G1g=="
157
+ },
158
+ "icon-external.svg": {
159
+ "src": "97a63312f2f3742a92945f8d88749dbb.svg",
160
+ "integrity": "sha256-ZZRqh5dtY6W9RtdFwrD0BaiY4R/KLj7ek5org5dhiXM= sha384-9VDt4hCbNSJUoNFKE/x1/UrBuxR2x2hNKZFfgie6I+ogsjRcNKgWQp27o+zZhfLd sha512-YONCeRp+yZ1GwgQBqDZxvFRSTBkYvT8hMGD3WVn4EP5FkrRYDBPqOY3QFE5Kj6yy65uxExY+D4WeYUJBgU0Ojw=="
161
+ },
162
+ "icon-feedback.svg": {
163
+ "src": "7dc00913481d3aa9a49be8cf59c3c035.svg",
164
+ "integrity": "sha256-wblvGlrCG5TUofVjXU15+CBY2aRcC6h1sV4Dd0XuyMU= sha384-ssrw3CwHB/bh8E/yiLGHxatTI0xlGeOcvemUlUQyvGoehxMUF8fZDco/w1a6RF3l sha512-J8ElVtpiYvQzUlS74h/QtWngAGjkTCJqdVvXpPV5169mQx8f4YjbLkFvxJaUgQwWa6Cxeh53xdMCrU5Qih80iw=="
165
+ },
166
+ "icon-homework.svg": {
167
+ "src": "ffc68bfb492c28cdd981df81d36e16fa.svg",
168
+ "integrity": "sha256-7sf4rOZYKIP9qB3Gy1658p9KYCU0GmAjt21KjuuX8sQ= sha384-evtoWVKVfwGkPHIogy6WgvvbRs8APaAJbnqS8cXl42t4k303HueNhzhqe+qizgak sha512-eDqCY98nA1OKs6dS5ERZBW/tWKdPileDrEBPLopep1hJkqK0CZsGGpb+sd/PHwq/y+dKL8nAUAAtJD1aj7DYAA=="
169
+ },
170
+ "icon-incorrect.svg": {
171
+ "src": "79d4706e51a98be43c9d27102c6b1b91.svg",
172
+ "integrity": "sha256-0wBdRovm9zI8TfENz6nTYhEA+CPEobOUbB3wuZPDcdY= sha384-8x6qtL6UDYSqef5xokqC153m/QEnHeT/y2jlVTbYsa21SGzhbGr1vJd4eaQEn+3k sha512-3ePjz40aQczwcCvh0e7sKMQWog9l2tRVH6aP9l/i2ye/Nvy4zfphsX+Ke15YXK46fKWm5WhBvzRdziGBw/WRaw=="
173
+ },
174
+ "icon-individual-review-heading.svg": {
175
+ "src": "005ae70666804bf1b4fcbdd1820cda69.svg",
176
+ "integrity": "sha256-z6B3CCVljKsfARlA4smvKa8MWT1+yKVyCb5Q2xPV+5s= sha384-L41LTjzYeTj1BAfaxuLLplZF5lS9HI7r19SlOprdfYlZxyuN6eWYweCLySfBJLl8 sha512-4/0E8WkRF7zyekaFucGHMho/+sqyHb57QvTwJ5U6ZYZw4c8ACFoHcNDd6R4kuI06ImivTmvK0c+3IFju8WpOcg=="
177
+ },
178
+ "icon-individual-review.svg": {
179
+ "src": "94f2e768af2ef350e8756f5159a3b560.svg",
180
+ "integrity": "sha256-6XWMkb/NOcs5yKd3zXn3wHG/X9dHpX7eIhPVTWmPMjw= sha384-Zvssf5n/SRzZl/1nr26TW99JJrgDKZSrb2qjB/vP0OySH38HTBP1CSxtR95rTK8i sha512-UoAVUGQXLBdFHocYTTZtQT4JQa1jFyvDv3dKj0YqCwr5BGuq2ICgI+ItT+FLpUxleattFTAoNTxZJgnqrdkkIQ=="
181
+ },
182
+ "icon-interactive-placeholder.svg": {
183
+ "src": "2a0017a49d2dacbc02dab29ba52f7a08.svg",
184
+ "integrity": "sha256-NCfCPWYY8SX8a8wF0UZ71MtZ0xz7cyArY+6Z4azs2wM= sha384-jtOPNwwOtGb7IBOjTMGbjUqvTXjpvH9tn6aiHPtNKp8j8KlN44IihZNrS4AxtfAQ sha512-9U1du0DlL8DOIe39bsEQXEwWbS4NQmrc4vGC1lGL5z4r68mkcC3KOFkwPi2BWWN/vHJ82daqihBKmk1eCn74vQ=="
185
+ },
186
+ "icon-interactive.svg": {
187
+ "src": "790f8f667a1ef6aa74114278d7e58b7d.svg",
188
+ "integrity": "sha256-FDbdyyGIVVSSUlTj9A1a0BgEVkURMetRvMdKSqpt2MA= sha384-XhOGsiw2ypmKK5+Q8ocjx6FNGACD8F6pMOauwFtONWL47vA0tsNFDUkpmzfpzUgI sha512-P9qJuOoQaUHZ/p+1oa9AAYjAHJKg2BURRjDmHVRHomOpJakz9zKblJNaYRVaBOJWXrWWqqsDpwAI6znqVuazNA=="
189
+ },
190
+ "icon-new-course.svg": {
191
+ "src": "8ff80c156c21fc6abf9683c5c17de83f.svg",
192
+ "integrity": "sha256-uo955IwvjR3ScptZKAdQptFFCc+L5T/JmZ2hu4Hldxk= sha384-kK4iY5qdUN7UpWRuRLz4n3qFAs1m+5nzAXCySMKKIqBMNkV7/ZOZbOoZ+4E2gWTn sha512-CiUa0EJHljs9YN/zfJTcHDXhAHfl/0LpLKD0ndQZ0XsXRaXhHXFVVC6FoEHFmlMJhjuYWndhvm+iu6gnRZsE9g=="
193
+ },
194
+ "icon-personalized-intro-heading.svg": {
195
+ "src": "cbdf929d0e17cf97add3bc0dac6a7328.svg",
196
+ "integrity": "sha256-IBctmn9uifI7pVyxN2AexMqDiMA0kBd9GIWXvmBjSSY= sha384-QSASvvsbnTxKvqE39SdY/SvOMZtN3jta5tfglrpReaBQwrWZAgiwx8Lu2Nr9K8bv sha512-j8nX3RJSFuflhL1gMAKFdbnT//RvitfljX2J/mKgMnF7qekYoWAJGyi203k6/U4zWjEUIdFwHAsrnuE6gwOxqw=="
197
+ },
198
+ "icon-personalized-intro.svg": {
199
+ "src": "d0ec81696d3f0f537b73cc7d55aa5d8c.svg",
200
+ "integrity": "sha256-AKsLueFcgvjfVdRvoXF9JRaEp0d00WJWF48bplDE4KM= sha384-irp1AA5AMLgDZ+PkyQcv7WmIyQocDbgkMYiu8MXHFVbykU59Z1fK9fiYIDUNZfK9 sha512-MlyPKN8FoXgF7KyvwCCUrz0TcbrU0D3S5IDTEqoigVH6jqg6SBjn/wva+2usftm9DMBiIw7JxHSmRGYAJLUrSQ=="
201
+ },
202
+ "icon-personalized.svg": {
203
+ "src": "db35e38026c6e71b91bd689fea0cb6ce.svg",
204
+ "integrity": "sha256-os5aOEnjevx/9gTLS5wGa+r4Zi/Q2U+DOXwxiTOVwNM= sha384-rxBYlhFhyP2PIvkoK9jnLeoNzIcq3iD34xkmhOuAp2+gZMJ7jgvw8zww5plJEqlf sha512-28R7zIvQX8En8DYGFNqGksngu6k0I2qZ7L4ebfV2GA/jOEGIwgKIImPWDVJKuImKbqN9C4+PTJN8avPlCrxynQ=="
205
+ },
206
+ "icon-reading.svg": {
207
+ "src": "260832dd3b75923fbb73c2e4c9496f76.svg",
208
+ "integrity": "sha256-JihCXF0Rayd2OIXiTGI78+9gSUkL3YvE3MojjVlkZVk= sha384-6hh7LBOpsGEbwmSjprn/8u1at61H5ihj7LWWhtokxGxcx7Y4ClJsdhPQU+ehycHs sha512-g1kceTzm7WkbTgl9OFbb5wFHMSjoFTntz71JdzgPogU89DzJd7z1rJ+ecIshV07z0jrEWyFQag6oL3kO9qptsQ=="
209
+ },
210
+ "icon-recover.svg": {
211
+ "src": "98147b62873e4126b3e401e1de69dc36.svg",
212
+ "integrity": "sha256-LCc1oQEtidXDzm5gKYdefTDgeXdN4v9eRVgelyyb1q0= sha384-Oe3lDlAtROLcqbua09sa4U+dx0YKgmrGFWm/sB3V0a7F3weiBctVTe+vc5UUon7e sha512-18OSvbgIM1m/PQW0FZDD8hUw8lkcHlra9U3l9rDPMmWA0rZQWuBncLLEStnuMk7Dg0xJFLHXkoBoSFFsPLEr8g=="
213
+ },
214
+ "icon-spaced-practice-intro-heading.svg": {
215
+ "src": "e9b103dc00923e20ca3513fe7c827e99.svg",
216
+ "integrity": "sha256-jjfLXDcMqN2MKGTmPbV6xWEiFADvVpPFgspOUeU9nWA= sha384-Jp751ZJHk16LIUFNIISYzeUxqs0Wstixcft4IEfcErIyH8L7mHRqQ19n38M7ijWK sha512-DJwbFJ0ja/dQ+Pk1bWEpTcr4nErrITukQMnc3RMFZqZ2wvjkr46N2Oj+VyHyQpeazVdP+IIZTHGIXyWqJKxpdg=="
217
+ },
218
+ "icon-spaced-practice-intro.svg": {
219
+ "src": "759ca0007f65b2d71b45b77183d98762.svg",
220
+ "integrity": "sha256-IVk9O+hTqIhPE1HtFcKFNAhl8KA3AloSA60hc1D35SA= sha384-mrz5GkX/eaPGtpB+SaJ+SbeRe+lySFZc8ypl9S/FOYCsSU1LsTK2FXbjTZqNb9rV sha512-GP+2CFuLygKSpykN7HXWrZ1R7JqrApgx1FeVkA27Hq3VbGQTona6iemrdPz6l3KZTrTpOTQbmkDi4f8RVM5zrQ=="
221
+ },
222
+ "icon-spaced-practice.svg": {
223
+ "src": "313955b37572c6d83e0989fcbaaa3a1d.svg",
224
+ "integrity": "sha256-dnJamctcrUQMUEnuJ9USdrPjwdzzraj0diuOdRD9+1c= sha384-uusWYCiPcxLnKG/m4+XecfUlSb+voNei1uXO/B/CVq+3yTBT8x+XEE8/k4LJX7L8 sha512-cdEo0Ea50nJPfX1NwAuVGvdhSd97VJkGnJOZ0ThkwZDuBVeYnXzOlMznVQsIKIFxfxMURxPtgr7Lgvqe3V5ahw=="
225
+ },
226
+ "icon-test.svg": {
227
+ "src": "c07bc4e863e2e875e4f7367ad7da03f6.svg",
228
+ "integrity": "sha256-8ovyBLYu4km60nOW2obXQGLFPN44ZsgyIiSwmO22b9U= sha384-eBQPb5Lok6/b6BsAvI20ANFiymp9KvTSIay9kPJY7SBuBRBiAUKnnh/3foT1WNfa sha512-ngj/qVNQrlwKcX6g61bnPfdI6kBpJSeLNb31k/eqSamn+vVZ2hb7RtbRWVOCKhlSx3/2/u3MSYWMhPFwKV3zdg=="
229
+ },
230
+ "icon-two-step-intro-heading.svg": {
231
+ "src": "000934185c3c0d5be58c6a6dae7b8f26.svg",
232
+ "integrity": "sha256-2Bytl2XMGtb9Z3iXDtHJNY7P2mWQIRIsViY9L1unwXc= sha384-haJFr46mCgFjuJkcGOFjtcMyNf38Yr4WmzC3gn9G5YXhkt10IWP/MqTjxFKKa4HF sha512-uQjoDHvw4BJ6LeVVj4Gac5cR8Kf3G1jJsRfuCixzNTAWdh7SYzuodJxzpih9cRw2Cnqn/ZANwfzWBkJGt/NDng=="
233
+ },
234
+ "icon-two-step-intro.svg": {
235
+ "src": "dada9a6e0febdd86d4ad4ad3ac6ca2f0.svg",
236
+ "integrity": "sha256-dDRjGCnDNkRKFd9AnUYsfCG97J6LFcxa4JQnLCwFkxY= sha384-E+/YdMVeaVpfYBHopB4Zm9KP4+zh4yfcNfdl9Y8+1wxS4+Q32uzkL2UTVAdCCe/U sha512-O/ctilyRrMXmqQnQyI4Qukg/8QHRxxkVU7hKMWZQHm+SwMP1xag6bsltJ86U9dZv7k/i1516I0my1jsnUHbaIw=="
237
+ },
238
+ "icon-video-placeholder.svg": {
239
+ "src": "59c2b6634ba0dc7fc7eca3ae8a679152.svg",
240
+ "integrity": "sha256-p04VjnTOPydVDkpF0PZV4UIzMxvO/BQR2z1GRMVzc/U= sha384-v40l/dwi7PJeU6QHWw+SnLWN4Uu5KDSjjkAv74tUUgtl1pS8mjh5W5IVupD0YFcM sha512-pCbKElEAoBeSyjU1jHHE8cpCG5+uFOy+rgEgAublEdA93CorUyixibXA5iVKrrQZ/ZQmcXlluj8aYKhf3sOMow=="
241
+ },
242
+ "icon-video.svg": {
243
+ "src": "21f3e628bc44dfce2e24f8cfec47a0d8.svg",
244
+ "integrity": "sha256-NlwXchMCaxZB3VLlcxo4piwni5jjo/eplJ/UaQU0DdU= sha384-Xn0xt8K/Sgd14fGQVyjPsstfi2Y5L26OPu6UleKEsJhszceJJmcgY4dr16e6OFPm sha512-tpsdzcO7wls31Vl3Vsjc0auMJvR7cEo8hOoE+01xVLVkb5qKi5pOCU4xaXG08xFVL33dRx8fUm+z1R+jIRTUVQ=="
245
+ },
246
+ "icon-worked-example.svg": {
247
+ "src": "309b353715d7c6b9ae2a81b1a9023780.svg",
248
+ "integrity": "sha256-8t4YvRZDcaIbUnrchsq4D3m8C9A0yIRrk7IcaHhZlcI= sha384-tn3V6W2JF0UlJxo7WYGOURgMjCIRH/VqF4nJUX06YQ1oGXP02A5G5sWPKtvHby52 sha512-UEGcHtTj0NogdhyqXRCdeUzLUrsZvGTTiX/UCkqimBGBzLSaIIO3EtNr8JoYAdUXQEq3nMQul6ouZhJoRkgHEg=="
249
+ },
250
+ "icon-wrm.svg": {
251
+ "src": "c7bd4e178229a98b8774588bc7a6ffe7.svg",
252
+ "integrity": "sha256-XcbLf91P/SJgrYxy6CNDq9FOGxKCmNVw1kauO6S0+a0= sha384-d52Q/QDbFPf1ZLVgAnBk+In+i7l0I0FHCxj15XlH24um/dgLm+Zk+s+WVood+nqr sha512-WyNAhnnew2LtsesFuvBSsZq9OjeI8MyI88INYfPPgZyEJmkkUwk2w6EhKl8aJF5MfyMohH9eUefFiFLXiz9InA=="
253
+ },
254
+ "instructions-highlighter-icon.svg": {
255
+ "src": "8fe7c78ea503e5570a5f304da25a18f4.svg",
256
+ "integrity": "sha256-3toLWhK8uSO9ZK4VZb5Ts6PmF7FpPw280LNrj/aWd1s= sha384-nC8EOBd4BAxIJkFAKxksaH7ufXYLwZKqLhRpx8Tm37OP49QJL4wQfSAckxeZIMRB sha512-ZQ59ZjAJjrSnH10iJji/pGwPAuLXeKgejtdfITg112TP1Y13FOWdAYFDUs4As2EAufPaoZaCIeSMKH9cw+ug9w=="
257
+ },
258
+ "instructions-notes-icon.svg": {
259
+ "src": "fd076cc8c9652104b669e16f1fd6dd39.svg",
260
+ "integrity": "sha256-W52rFj58UdsNd0AxpgN5ffwqyh1MQaotN7Ii1BmBDGU= sha384-Mp4WKhTV6XHT+hzBi0xu6BBgD9DV/OPWkhJRuouSKS1n0G0rzzew2GzbwcS3q9kz sha512-mqfzAy1YWoMF46TSuu99p2kuQN7cRcPm9511iE3k97suXlDHkXd9ViBRV3W7p6cx6Ry9Pse+RDKbhJ3WLFOsqw=="
261
+ },
262
+ "instructions-panel-icon.svg": {
263
+ "src": "f54739e81447998f251bfa4cfe5235d8.svg",
264
+ "integrity": "sha256-daRrpXUohzziG+lL6n4EC+skDqyzi5Gdm8JkgwqOG24= sha384-1Aq1g3NDNjzRZI0mn1LzesF1DR1LUwE5iXY68lDBfD8WyMx1s3M9/Rh1VXoUhhMr sha512-fy5qGHUe4wpqJbr85X0Pnj7yCXcEqmHc7TASK23xv8F1BWp4GVgnSAwnDl8e+bGlb3mFe+0G7DLmVu7VFgzzng=="
265
+ },
266
+ "lmspair.js": {
267
+ "src": "lmspair-b920eb0be760a7c440bf.min.js",
268
+ "integrity": "sha256-zj4BIjiWRMW8+QCFAF5QoySAtYl3X6v4G6ghehGUe2I= sha384-w0fhrLZFfWdcozcxYAvU5Fn6cQBoJXReN45T34IbFAAY3dPdKwXA007UCx7G8bnR sha512-PK7Y3NTJP4J01XJUP4zlvDaCbsSJH0+UGefnfEsRqQ8GKK8jukCWui23teFX8qPptHi+9cgPUz8FhEUCRssWhA=="
269
+ },
270
+ "lmspair.js.map": {
271
+ "src": "lmspair-b920eb0be760a7c440bf.min.js.map",
272
+ "integrity": "sha256-r6zqgX5y0+kz8XueErGOCJp21skTeBg2Cyc/HYpBtp0= sha384-/KoyUPKkIwTK8WbNGFlOZcNHF/yzHIIEhmUpIucAyel1Wyl16JTTszBbmIgNVXk0 sha512-q8sytkhkh0q4LuavgoI/ByIXferqUdDsRr25F9l/ws2vo3sxvWQyEq539MjltvvFXPwUjf42eRIlTANL/lEggQ=="
273
+ },
274
+ "low-cost.svg": {
275
+ "src": "d472c99532f99a96b0077c98919b225c.svg",
276
+ "integrity": "sha256-YUxnr6DqF7RUBPLRkpeMWLzD8meevaYeGICF5sjKqdg= sha384-7/cRGlxuGP5Txh69HjejWx24sA1ADsF654y3fdtXQjsfzHwkrRVz+8qz/nXuG9bs sha512-4ql/s1cwVQAUZY7SCcVG28yT8NfMO9n7xp5Q+Hbi17dq8ktZsOnW4KGRjfIQLzYv5Gq4ba1h9kS6ZuxKa4BecQ=="
277
+ },
278
+ "machine-learning.svg": {
279
+ "src": "55490dd6c556c47099d62009ff27b239.svg",
280
+ "integrity": "sha256-KcHMLf9/Jk/SiWir2R4GoiVibnaSPsCSVaepMB1OXU0= sha384-hvPkNJSzfgpCJ1H0d5cFekKzF5YS07R1bDUFkVXQn9VOKLeeHKRXizHKXihTe1nI sha512-Ioas8FnK3KSgZyCPzy+4kyVbkTcSSQI7t0I4xip+qjIMcTbkY2tmKCE4KgfBmsMibOrOkm4Cdx0ayQAHBAruRA=="
281
+ },
282
+ "openstax-logo-white.png": {
283
+ "src": "f2444d4fd75af3b6705db4faa67c5159.png",
284
+ "integrity": "sha256-tx/oz4lQz3fk1MD4bkCh+q7ccRbZO9jaUkNUdLa4agw= sha384-6QAmqkxWzSaCGZfZXeQ4DsgzeUl7VAKMxuGznMuaODWTWZ92B5NbRwnX2tmOXNGq sha512-fs3NoJJQNCJzk7wq7KfV1Hm5amlhkHSboGK2SHolGm64KIoHhh8TAixfzYX1q6F/lDNvmuNqfQOatItzuMvYaA=="
285
+ },
286
+ "openstax-tutor-beta-logo.svg": {
287
+ "src": "f18b0f23c170a67630329412c35f7db8.svg",
288
+ "integrity": "sha256-nL0MxXkLoMYbAVmOnAzUMhFN+GsijRlbOvzy4Vb71u8= sha384-KPsn3+E01chDGAQ+iwjPG4zT40tWQQgeTG1IcDrZGssmvJZZxumw3YJo79ocGgNV sha512-sb1CRkrTtA9wMmafVG9A3JXNTkBBJ3Gs+j9KNLImVPqd+HBWqQ4je7ZjKY0GH9DzDFUovhPajwPH0Ulyh5qZYA=="
289
+ },
290
+ "ost-hero.jpg": {
291
+ "src": "f0d3bb6d9242c522ff41985568cdcaa6.jpg",
292
+ "integrity": "sha256-Wmvgh9YW1rpqmLHTNDG741acRV0Ed/4bXmUyILaTKg0= sha384-86PzPaGiRYQEKGshdQ952zAF0e1wgRlmOuijLqtdnzL5Htmot1vjDK/JOxfHk2wI sha512-wtsH/jVxQTcJeY/amx8IYzLcrakfPAa/1cMC6X55fJNpinYOqYY8JEyC0N4/XOL2M2oXrXWXAN7buy15ZQ3BDQ=="
293
+ },
294
+ "pending-verification.svg": {
295
+ "src": "e767f1bf6310180b139aa05f6b533263.svg",
296
+ "integrity": "sha256-RGKCVnt5LvnfsQw5fnaKWdm1MnqbPP/S0UubXFzHTfY= sha384-3pjlCK8T1uTBU0anaYdwSYckECzPiEFv/2ZtwdSshTdOhacNtZYMQ+1SX0FXZ+s/ sha512-r1E1lmCRwedlIrD9ICE+slrnhmmJinYzfdtqIZTmIi47dNqSbdm6Pjgc4zOatB5U5D3sVB/LDB3zCmbx+F/Dlg=="
297
+ },
298
+ "personalized.svg": {
299
+ "src": "2b20d03cc82916d962b66602c03139a9.svg",
300
+ "integrity": "sha256-O/LsK3vPlv3BQ4ljTxYNbtV5MYIUHjxy6RvnydzKdJU= sha384-CAjpa1dwP1lEF8I8SAwrzQ8hVEiTNj8Qn+PReZ8i9VD4mYogIrmuaoHJfjSYMrlN sha512-CtNXI/LqpiQqLr/fj7axU7LxU0LBzhA/yvLMhKd0sSz7ak3I19BOVf5RqSJGF6UXJ7oK760TXcMrGPfL8ppmlQ=="
301
+ },
302
+ "question-details.svg": {
303
+ "src": "7db5ec34af929030c99ae593ef1129fd.svg",
304
+ "integrity": "sha256-Idl3X0htyjennT4iZ7wlad6oLwPni5e31qIjHvBG0ig= sha384-nq5eoyY7uHelThhHS6ukxsztaSPvxC8fUrRNoFzFDbkU+KVgS3SjGtBQejy5zq0+ sha512-ryndGXWUjsPEeK04P1R8QjyLFvKqGQGKcSQwzPU3hszqaPHY4DkAR6Q4xTX2lJL3B7lbpwlbucSNxJjByF2BSw=="
305
+ },
306
+ "sociology-book-thumbnail.svg": {
307
+ "src": "87f800dff49d121084ae12bdf6b239f7.svg",
308
+ "integrity": "sha256-jKdj9T2a0NDgMKN/f4kBheWk4Qj8P9ijxKVFo5Az+n0= sha384-ueLpzQcQT6xn2mLd9fwBYN5V39agKUgQ0cB5TKoZj3uPAxugcUi6/45CuyPVcso7 sha512-gXqXDjmj8Z9FIBg/9P3HDIFdIGFNj1Og4FBlx0u7R4g42P1cK6jV8zVv4vzz8WsVOhlsucpxix118PwPidhyoQ=="
309
+ },
310
+ "spaced-practice.svg": {
311
+ "src": "921793921ccdd98049dfb9afc9e214c0.svg",
312
+ "integrity": "sha256-EuBXQAroPjLMdFlcL/7lxOwGhTzdgEEtDyCMfXQK3xA= sha384-m/r7MVfXZ6nvDei8nVZGxMxMUvkTzsJ6DG0xirWVvTFTuTzj3xHhONatgW2tR2qJ sha512-3JjnvUz/2vzWu6glse5dfmGC+q7eoZVQoCZTz0kDjB2Cd62g8tMOwblxGd01rlNN58QwdM7+JtLnTNV2YmXvUg=="
313
+ },
314
+ "student-id.svg": {
315
+ "src": "a43719051e12773aac21032f5605bf44.svg",
316
+ "integrity": "sha256-JGhkqIZaqydKtTHRd34d7siuWWJqPK4aBclthhxSBHY= sha384-mvQWsSeekaNJvsxZVYkt+yjrj7SeC1mpdtuH3rDEPm29MMu6u0TM7l09gkwsr1+Q sha512-KrKVoQojDXREk1CgmPzb67opIQXHf2GGaCbaxX3MbbWoCRKsBr1SzUtKKejeOXXqEcYgH71C7alqAEAsXv157g=="
317
+ },
318
+ "thanks.svg": {
319
+ "src": "b6c57fb1a28c9b844d80c2731eceff04.svg",
320
+ "integrity": "sha256-V9gGBEv4x3SCE4rXswydR4vwBJGCDsbP6RVLcEHn20Y= sha384-mTjvU8iI3HzfV2Qwx3GrIBUXEKgeEwHe3ZRDixFJxLiN1NcjtrcbxqeIDRb0yYvH sha512-DaCD05S8s2vE3UkE7rls74qeNwSCbdGYtQXA+Bze4FkjCrWIXxb3shl2TWp93Tc0l5e4WMYE/yimfJ8Av1eLcQ=="
321
+ },
322
+ "tutor-background.svg": {
323
+ "src": "3cc6304df650475b4f10f232ff1a5ef7.svg",
324
+ "integrity": "sha256-hwlHuLTQur24h28OmJblnn3sxHpriuWag+JZEP0FmwQ= sha384-Znri9p3p0BEVkbUHn6dC/4i4eaEE/vZgo5GY7sB2vQeDQhEjNRGyviKM+n7g+tOm sha512-1pejTCv0JPxfhLQ/YccFsZeFzKNo1rmxM0pG3w/p5C9jAJNgL+8SxQzJ0CDhATrPXEKJAOMQebFjC0Jp0OJQiA=="
325
+ },
326
+ "tutor.js": {
327
+ "src": "tutor-b920eb0be760a7c440bf.min.js",
328
+ "integrity": "sha256-tUf3KX1QlfRrJ7KJQQ4Ug40ZQS2T5thLAHSQoxbFI88= sha384-jmALLyE5iHUJA6h/FjOiPJT91DkuFM1XFIvo3OI8ZuaPm+ViPRdVwMrx+i5kcchC sha512-BBlxT9ywpOCERkuP0CSu8AKLRCWmd2uNMf7xwxZPTNH7233TGTJrcnClysI6x19gjYfiaC0JAmmfzNJImEjWPQ=="
329
+ },
330
+ "tutor.js.map": {
331
+ "src": "tutor-b920eb0be760a7c440bf.min.js.map",
332
+ "integrity": "sha256-Zzt45LgnZqL+4u9CJPZkJC12HZSsB7mLGfqAF84sy0M= sha384-CQoX4WqDssFuIHAQWSYjVVypECIxQKFTSUT+NT3Zt34j7/4GnTswEP+4wHgAadWd sha512-7NM8XP+5ZrEaWzLYKcS1CmsLtRQ3o/0Xsfl2UT+H8sGRbo3aaUVagdnPE+ldWrjyKtPqKbb4Z3IrJYBUUzfZzQ=="
333
+ },
334
+ "two-step.svg": {
335
+ "src": "420bd9cd338cbadd717b467652f39972.svg",
336
+ "integrity": "sha256-aNb0APXZC5Ccskfvym4qLaYuidR8Q/DCdScvaDbY7+A= sha384-S4QxsFZ9BwOHWQf2RjXtXpghVIzss0LkIWxIr/jgjEbDj7UfkY1NNUCnjpi3tGyh sha512-fKvPtm05LtVny66ebvGEuACVH+FZasRDkNym/kbTQoSp0JHBlaGROLDyaIclri3i6/lauJBUR8E0g25hfsyPaw=="
337
+ },
338
+ "under-construction.svg": {
339
+ "src": "3ec1654100b2949e03fe3672d4d11c02.svg",
340
+ "integrity": "sha256-XYAFrfp93PRK93dmGmyuHwF0Vc8aK607Wa8QaR+d2AU= sha384-0/CAwh8G+ojbqV2jbISPpF8JZz4cM40YhSRB5OOtMDW+oeMTSAFOrydhAYbmTacR sha512-PLHo8+zkC0JqAJC3ZPK5WNZbFiSGHYYHI6XxmaL7yIEX8w5kr4n6i5N/WVpeeyLP3SOo960q1giupV3BqAHSOA=="
341
+ },
342
+ "view-analytics.svg": {
343
+ "src": "9d10bd3d48974cdbf0f331c7feddd248.svg",
344
+ "integrity": "sha256-vtNdsHjfsjbQk/5oNADgrIAIqURecD9P4ZrZAo6Pfes= sha384-PlIKDJbmktmjRxnOZWLjKXN/ClJryQR2zfPmNrfBMvxl+dku7vumqYFRIfwkoK9j sha512-pwgSXSXsQxdSIN6Jot3GFP2yQTaj3qNDNh7lkhq+w5H2CpdBCEcCV2CS/CHJNZUMymhvbEJFNs4hKASdNkX3Sw=="
345
+ },
346
+ "view-textbook-questions.svg": {
347
+ "src": "08012f03a5268802675536d260cac3f6.svg",
348
+ "integrity": "sha256-mvsVwamHpST7FAvIQHdMvnTTAY1sBid/C+ezqf+wdmg= sha384-5X7g/jp6BEjbh4fmyRz5OdXYSRQ+GOKCgbxifciG4jsEVZbEOXB80h7veLLcIyqO sha512-ebw6zM2nJ3l3B0x9x7eVWE6cOnAK1os4kKX75JBByp7YE/LV/D8He5a3EBJehUHvMlIIBsD8qqNKClanvp6Jug=="
349
+ }
350
+ }
351
+ http_version:
352
+ recorded_at: Thu, 13 Sep 2018 17:45:53 GMT
353
+ recorded_with: VCR 2.9.3